Включение и отключение текстовых ящиков через Radiobuttons в С#

У меня есть эта форма "Emp_Employee", где у меня есть 4 радиообмена: radio_ID, radio_... и 4 текстовые поля: id, имя, зарплата, desgination, когда я загружаю свою форму, все текстовые поля отключены изначально (это нормально), но когда я проверьте любой радиобудильник, чтобы включить его относительное текстовое поле. Все текстовые поля остаются отключенными до конца независимо от того, какие радиоблоки проверены! Пожалуйста, помогите..

private void Emp_Employee_Load(object sender, EventArgs e)
{
 id.Enabled = false;
 name.Enabled = false;
 salary.Enabled = false;
 designation.Enabled = false;

 if (radio_ID.Checked == true)
 {
 id.Enabled = true;
 name.Enabled = false;
 salary.Enabled = false;
 designation.Enabled = false;
 }
 else if (radio_Name.Checked == true)
 {
 name.Enabled = true;
 id.Enabled = false;
 salary.Enabled = false;
 designation.Enabled = false;
 }
 else if (radio_Salary.Checked == true)
 {
 salary.Enabled = true;
 id.Enabled = false;
 name.Enabled = false;
 designation.Enabled = false;
 }
 else if (radio_Designation.Checked == true)
 {
 designation.Enabled = true;
 id.Enabled = false;
 name.Enabled = false;
 salary.Enabled = false;
 }
}
6 ответов

Подключите все радиообъекты к тому же CheckedChanged событий CheckedChanged а затем просто назначьте radioobutton Checked состояние в состояние " Enabled текстовых полей:

private void radioButton_CheckedChanged(object sender, EventArgs e)
{
 id.Enabled = radio_ID.Checked;
 name.Enabled = radio_Name.Checked;
 salary.Enabled = radio_Salary.Checked;
 designation.Enabled = radio_Designation.Checked;
}

Другой классный вариант - использование привязки данных. Вы можете просто привязать эти два свойства к загрузке формы:

private void Emp_Employee_Load(object sender, EventArgs e)
{
 id.DataBindings.Add("Enabled", radio_ID, "Checked");
 name.DataBindings.Add("Enabled", radio_Name, "Checked");
 salary.DataBindings.Add("Enabled", radio_Salary, "Checked");
 designation.DataBindings.Add("Enabled", radio_Designation, "Checked");
}

Таким образом, вам даже не нужно обрабатывать радиообъект CheckedChanged event - текстовые поля автоматически отражают состояние радиообъектов.


Page_Load event wont trigger the desired results.

Вам нужно добавить другое событие, чтобы включить данные текстового поля. Например:

private void radioButton1_CheckedChanged(Object sender, 
 EventArgs e)
{
 salary.Enabled = true;
 id.Enabled = false;
 name.Enabled = false;
 designation.Enabled = false;
}

См. Эту ссылку.

Надеюсь это поможет


Я предполагаю, что вы используете WinForms, а не Wpf

Весь ваш код находится внутри события Form.Load которое выполняется только один раз для загрузки формы. вам нужно переместить код обновления в код, который выполняется при каждом RadioButton. Обычно это событие RadioButton.CheckedChanged.


Попробуйте включить и отключить текстовое поле в переключателе. Проверено измененное событие.

RadioButton rb = new RadioButton();
rb.CheckedChanged += new EventHandler(rb_CheckedChanged);


void rb_CheckedChanged(object sender, EventArgs e)
 {
 //you do your text box enabling and disableing operation here
 }


если вы используете xaml, не нужно кодировать С#

Попробуй это

<radiobutton x:name="radioButton0" groupname="RadioButtonGroup1">
 <radiobutton x:name="radioButton1" groupname="RadioButtonGroup1">
 <radiobutton x:name="radioButton2" groupname="RadioButtonGroup1">
 <radiobutton x:name="radioButton3" groupname="RadioButtonGroup1">
 <textbox x:name="textBox0" isenabled="{Binding IsChecked, ElementName=radioButton0}">
 <textbox x:name="textBox1" isenabled="{Binding IsChecked, ElementName=radioButton1}">
 <textbox x:name="textBox2" isenabled="{Binding IsChecked, ElementName=radioButton2}">
 </textbox></textbox></textbox></radiobutton></radiobutton></radiobutton></radiobutton>


Я думаю, вы можете изменить видимость:

textBox1.Visibility = Visibility.Visible;

Я надеюсь, что это сработает, это написано из моего ума.

licensed under cc by-sa 3.0 with attribution.