ПРОТИВ простого переключателя с переключателем C#

#c# #radio-button

Вопрос:

Я пытался найти здесь решение, но ни одно из доступных, похоже, не работает. Две переключатели находятся в групповом поле.

код:

 private void radioButton_CheckedChanged(object sender, EventArgs e)
        {

            RadioButton senderControl = sender as RadioButton;
            if (!senderControl.Checked)
                return;

            switch ((sender as RadioButton).Text)
            {
                case "radioButton1":
                    textBox4.Clear();
                    comboBox6.Enabled = false;
                    textBox4.ReadOnly = true;
                    textBox4.Enabled = false;
                    textBox4.Text = "000";
                    break;

                case "radioButton2":
                    textBox4.Clear();
                    comboBox6.Enabled = true;
                    textBox4.ReadOnly = false;
                    textBox4.Enabled = true;
                    textBox4.Text = "";
                    break;
            }                 
        }
 

Который не хочет работать, так как в нем ничего не делается

Ответ №1:

Я предполагаю, что ваше событие «Проверено по радио» назначено одному радиобуттону. Вам нужно прикрепить обе радиокнопки к одному и тому же событию. Вы можете сделать это таким образом в коде или в своей форме:

 public Form1()
        {
            InitializeComponent();
            radioButton1.CheckedChanged  = new EventHandler(radioButton_CheckedChanged);
            radioButton2.CheckedChanged  = new EventHandler(radioButton_CheckedChanged);
        }
 

Но после этого вам нужно перейти в файл Form.Designer.cs и удалить строки кода, которые назначают событие радиоКнопкам:

 this.radioButton1.CheckedChanged  = new System.EventHandler(this.radioButton_CheckedChanged); // <-- delete
 

Кроме того, ваше первое условие if (!senderControl.Checked) не является необходимым, потому что если вы нажмете на кнопку radiobutton, то она все равно будет проверена.

Итак, вот ваш фрагмент кода:

 public Form1()
        {
            InitializeComponent();
            radioButton1.CheckedChanged  = new EventHandler(radioButton_CheckedChanged);
            radioButton2.CheckedChanged  = new EventHandler(radioButton_CheckedChanged);
        }

private void radioButton_CheckedChanged(object sender, EventArgs e)
        {
            RadioButton senderControl = sender as RadioButton;
            switch (senderControl.Text)
            {
                case "radioButton1":
                    textBox4.Clear();
                    comboBox6.Enabled = false;
                    textBox4.ReadOnly = true;
                    textBox4.Enabled = false;
                    textBox4.Text = "000";
                    break;

                case "radioButton2":
                    textBox4.Clear();
                    comboBox6.Enabled = true;
                    textBox4.ReadOnly = false;
                    textBox4.Enabled = true;
                    textBox4.Text = "";
                    break;
            }
        }
 

Комментарии:

1. Я следил за тем, что вы сказали, но никакой разницы, я понятия не имею, почему. Однако я заметил, что у меня не было строки, которую вы написали в моей Форме.Designer.cs (в моем случае ToolingDesign. Дизайнер.cs)

2. Используйте точку останова в первой строке radioButton_CheckedChanged события и посмотрите, попадете ли вы вообще внутрь, и скажите мне, если да.

3. интересно, что он входит в RadioButton senderControl = sender as RadioButton; и также switch (senderControl.Text) , но никогда не входит в case себя, поэтому по какой-то причине он никогда не запускает дело. Нажатие на переключатель запускает RadioButton senderControl и попадает в цикл с switch

4. Вы можете проверить, что находится внутри «senderControl», когда вы остановитесь в точке останова. Там вы можете увидеть, какое свойство текста вашего элемента управления вы нажали. Таким образом, вы можете исследовать причины, по которым вы не вводите ни одно из условий дела.

5. господи Иисусе, я тупой.. в любом случае, название дела должно быть фактическим «текстом» кнопки, а не именем (радиоБуттон1), поэтому в моем случае это было «Да» и «Нет», теперь это отлично работает. Не знаю, как я пропустил это, лол