单选按钮选中改变事件触发两次(Radio button checked changed event

2019-06-26 07:28发布

请阅读我的问题,它不是一个重复的一个。

我已经在Windows窗体三个单选按钮,所有这些按钮具有共同“的CheckedChanged”事件相关联。 当我点击这些单选按钮,它会触发两次“的CheckedChanged”事件。

这里是我的代码:

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

我插入这个事件迭代中的断点和整个代码的两倍。 请告诉我为什么它的行为就像这样?

Answer 1:

至于其他的应答者正确地说,该事件被触发两次,因为每当一个组中的一个单选按钮被选中另一个,将取消选中 - 因此检查更改事件会触发两次。

只做这个事件刚刚被选中,你可以看看发送对象,做这样的事情的单选按钮中的任何工作:

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);
        }
    }
}


Answer 2:

为了避免它,只是检查,如果radioButton被选中

例如:

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


Answer 3:

的CheckedChanged升高每当经过属性更改。 如果您选择一个单选按钮,则先前选定的单选按钮没有被选中(解雇的CheckedChanged),然后将新的单选按钮被选中(解雇的CheckedChanged)。



Answer 4:

从检查未选中,再从选中的单选按钮转换到检查它的单选按钮迁移触发一次(即选中状态的任何变化将触发事件)



Answer 5:

你可以设置自动检查属性真正为每个单选按钮,然后赶上Click事件,而不是CheckChanged事件。 这将确保只有一个事件被触发,并在处理程序逻辑可以投发件人,如果需要处理的点击式单选按钮。 通常,如果能在处理程序逻辑很简单回避的演员。 这里是处理三个控件,rbTextNumeric,rbTextFixed和rbTextFromFile一个例子:

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


Answer 6:

{
    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";
            }
        }

    }
}


文章来源: Radio button checked changed event fires twice