背景色.Enabled = true导致radiobutton's CheckedChanged处理程序触发

本文关键字:CheckedChanged 处理 程序 Enabled true 导致 radiobutton 背景色 | 更新日期: 2023-09-27 17:49:44

我绝对没有设置任何程序性链接或属性,这样我的CheckedChanged就会因为检查单选按钮而触发。

但是,当我单击一个不同的、不相关的按钮时,按钮的单击处理程序会触发(这是预期的)。在这个点击处理程序中,按钮会禁用自己(它会在另一个按钮的点击中重新启用),然后触发一个不相关的单选按钮的myRadioButton_CheckedChanged句柄。

我看到的调用堆栈实际上是

myRadioButton_CheckedChanged(…)myButton_Click(…)主要(…)

myButton_Click中触发myRadioButton_CheckedChanged的行显然是

色。启用= false;

相关代码为:

private void radioButton1_CheckedChanged(object sender, EventArgs e)
    {
        // L-R
        if (radioButton1.Checked == true)
        {
            orientation_left = 3;
            pictureBox2.Invalidate();
            Debug.Print("left {0}", orientation_left);
        }
    }
private void select1_Click(object sender, EventArgs e)
    {
        Debug.Print("select1click");
        if (select1Down == false)
        {
            // ... stuff
            select1.Enabled = false;        // Causing the CheckedChanged to fire
            select2.Enabled = false;
            select1Down = true;
        }
    }

背景色.Enabled = true导致radiobutton's CheckedChanged处理程序触发

好的,我知道了。

检查按钮和单选按钮上的TabOrder。

似乎当你禁用按钮时,焦点转移到下一个控件,这可能是你的RadioButton,导致它被选中。

在我的From测试中,我所要做的就是确保RadioButton的TabOrder不是在Button之后。

欢呼编辑:

这似乎是一个已知的问题,因为我刚刚发现这个MSDN线程:http://social.msdn.microsoft.com/Forums/windows/en-US/77fbec3b-1f63-42e1-a200-19b261b63794/the-radiobutton-clicked-event-is-fired-without-the-radio-button-beeing-clicked-?forum=winforms

好吧,这有点粗糙,但它不改变任何选项卡顺序:

private void select1_Click(object sender, EventArgs e)
{
    if (!select1Down)
    {
        // ... stuff
        SendKeys.SendWait("{Tab}");
        select1.Enabled = false;
        select2.Enabled = false;
        select1Down = true;
    }
}