Подтвердить что ты не робот

Радио-кнопка проверена дважды

Пожалуйста, прочитайте мой вопрос, это не дубликат.

У меня есть три переключателя на форме Windows, и все эти кнопки имеют общее событие CheckedChanged. Когда я нажимаю любой из этих переключателей, он дважды запускает событие "CheckedChanged".

Вот мой код:

private void radioButtons_CheckedChanged(object sender, EventArgs e)
{
    //My Code
}

Я вставил точку останова, и весь код внутри этого события повторяется дважды. Скажите, пожалуйста, почему это так?

4b9b3361

Ответ 1

Как справедливо говорят другие ответчики, событие запускается дважды, потому что всякий раз, когда один RadioButton внутри группы проверяется, другой будет снят - поэтому проверенное измененное событие будет срабатывать дважды.

Чтобы выполнить только какую-либо работу в этом событии для выбранного RadioButton, вы можете посмотреть объект-отправитель, выполнив что-то вроде этого:

void radioButtons_CheckedChanged(object sender, EventArgs e)
{
    RadioButton rb = sender as RadioButton;
    if (rb != null)
    {
        if (rb.Checked)
        {
            // Only one radio button will be checked
            Console.WriteLine("Changed: " + rb.Name);
        }
    }
}

Ответ 2

CheckedChanged увеличивается всякий раз, когда изменяется свойство Checked. Если вы выберете RadioButton, тогда выбранный ранее RadioButton не будет отмечен (запущен CheckedChanged), а затем будет установлен новый RadioButton (запущен CheckedChanged).

Ответ 3

Он запускает один раз для перехода переключателя переключателя из отмеченного на непроверенный, и снова для перехода переключателя с непроверенного на отметку (т.е. любое изменение в проверенном состоянии вызывает событие)

Ответ 4

Вы можете установить свойство AutoCheck true для каждого RadioButton, а затем поймать событие Click вместо события CheckChanged. Это обеспечит запуск только одного события, а логика в обработчике может передать отправителя для ввода RadioButton, если это необходимо для обработки щелчка. Часто литье можно избежать, если логика обработчика проста. Вот пример, который обрабатывает три элемента управления: rbTextNumeric, rbTextFixed и rbTextFromFile:

        private void rbText_Click(object sender, EventArgs e)
    {
       flowLayoutPanelTextNumeric.Enabled = rbTextNumeric.Checked;
       txtBoxTextFixed.Enabled = rbTextFixed.Checked;
       flowLayoutPanelTextFromFile.Enabled = rbTextFromFile.Checked;
    }

Ответ 5

{
    public partial class Form3 : Form
    {
        public Form3()
        {
            InitializeComponent();
        }
        int click = 0;
        private void radioButton1_Click(object sender, EventArgs e)
        {
            click++;
            if (click %2==1)
            {
                radioButton1.Checked = true;
            }
            if (click %2==0)
            {
                radioButton1.Checked = false;
            }
            if (radioButton1.Checked==true)
            {
                label1.Text = "Cheked";
            }
            if (radioButton1.Checked==false)
            {
                label1.Text = "Uncheked";
            }
        }

    }
}

Ответ 6

Чтобы избежать этого, просто проверьте, отмечен ли radioButton

например:

private void radioButton1_CheckedChanged(object sender, EventArgs e)
{
    if (radioButton1.Checked == true)
        //your code
}