C# 设置myButton.Enabled=true会导致radiobutton';s checked已将处理程序更改为激发
我绝对没有设置任何编程链接或属性,因此除了检查单选按钮外,我的CheckedChanged会因任何原因触发 但是,当我单击另一个不相关的按钮时,该按钮的单击处理程序将触发(这是预期的)。在此单击处理程序中,按钮禁用自身(在其他按钮单击时重新启用),然后触发不相关radiobutton的myRadioButton_CheckedChanged句柄 我看到的调用堆栈本质上是 myRadioButton_CheckedChanged(…) myButton_单击(…) 主要(…) myButton_Click中触发myRadioButton_CheckedChanged的行显然已更改 myButton.Enabled=false 相关代码为:C# 设置myButton.Enabled=true会导致radiobutton';s checked已将处理程序更改为激发,c#,winforms,events,radio-button,focus,C#,Winforms,Events,Radio Button,Focus,我绝对没有设置任何编程链接或属性,因此除了检查单选按钮外,我的CheckedChanged会因任何原因触发 但是,当我单击另一个不相关的按钮时,该按钮的单击处理程序将触发(这是预期的)。在此单击处理程序中,按钮禁用自身(在其他按钮单击时重新启用),然后触发不相关radiobutton的myRadioButton_CheckedChanged句柄 我看到的调用堆栈本质上是 myRadioButton_CheckedChanged(…) myButton_单击(…) 主要(…) myButton_C
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;
}
}
好的,明白了
检查按钮和RadioButton上的TabOrder
似乎当您禁用按钮时,焦点会转移到下一个控件,可能是您的单选按钮,从而使其处于选中状态
在我从开始的测试中,我所要做的就是确保RadioButton的标签顺序不在按钮后面
干杯
编辑:
这似乎是一个已知的问题,因为我刚刚发现了这个MSDN线程:好的,它有点黑客行为,但它在不改变任何选项卡顺序的情况下工作:
private void select1_Click(object sender, EventArgs e)
{
if (!select1Down)
{
// ... stuff
SendKeys.SendWait("{Tab}");
select1.Enabled = false;
select2.Enabled = false;
select1Down = true;
}
}
事实上,我可以证实这种奇怪的行为。让我挖掘一下。这算是编译吗?我的问题是修辞性的。您的代码无法编译。请确保你发布了相关的代码。我没有尝试这个,但上面的答案似乎更优雅了一点。谢谢@Crono@MarkS,正如我所说,我最初的答案只是猜测。我缺少的部分是声明一个新的
操作
对象。我测试了更正后的代码,但无论如何都不起作用。然而,我确实找到了另一种方法来解决这个问题,而不影响标签顺序。请参阅我编辑的答案。:)@Lucmorin先生,请你重新考虑一下你的投票结果好吗?谢谢。这听起来很有道理,天哪。马上就回来,你这个出色的反应者,你。我听到了。我第一次看到这种情况,你明白了;非常感谢。这绝对是一个错误。我第一次看到这个,我也吓坏了P