使用C#,我试图在两个复选框之间创建一个关系:1.CCD_ 1和2。CCD_ 2,其中一次只能选中一个复选框,因此如果PeelTrace
开始为true,而我选中MoveTrace
,则应选中MoveTrace
,而PeelTrace
应未选中。
然而,重要的是,应该可以同时对两者进行检查。我尝试了很多不同的东西;下面的例子中对其中一些备选方案进行了注释。
不管我怎么做,我都没能让它正常工作。我一直遇到System.StackOverflowException,但不确定原因。关于如何做到这一点,有什么想法或建议吗?
private void chk_PeelTrace_CheckedChanged(object sender, EventArgs e)
{
////if (tracePeel)
//if (chk_PeelTrace.CheckState.Equals(CheckState.Checked))
if (chk_PeelTrace.Checked)
{
////tracePeel = false;
//chk_PeelTrace.CheckState = CheckState.Unchecked;
chk_PeelTrace.Checked = !chk_PeelTrace.Checked;
////traceMove = false;
//chk_MoveTrace.CheckState = CheckState.Unchecked;
chk_MoveTrace.Checked = false;
}
else
{
////traceMove = false;
//chk_MoveTrace.CheckState = CheckState.Unchecked;
chk_MoveTrace.Checked = false;
////tracePeel = true;
//chk_PeelTrace.CheckState = CheckState.Checked;
chk_PeelTrace.Checked = true;
}
}
private void chk_MoveTrace_CheckedChanged(object sender, EventArgs e)
{
//if (chk_MoveTrace.Checked == true)
////if (traceMove)
//if (chk_MoveTrace.CheckState.Equals(CheckState.Checked))
if (chk_MoveTrace.Checked)
{
////traceMove = false;
//chk_MoveTrace.CheckState = CheckState.Unchecked;
chk_MoveTrace.Checked = !chk_MoveTrace.Checked;
////tracePeel = false;
//chk_PeelTrace.CheckState = CheckState.Unchecked;
chk_PeelTrace.Checked = false;
}
else
{
////tracePeel = false;
//chk_PeelTrace.CheckState = CheckState.Unchecked;
chk_PeelTrace.Checked = false;
////traceMove = true;
//chk_MoveTrace.CheckState = CheckState.Checked;
chk_MoveTrace.Checked = true;
}
}
您就快到了,只需添加一些标志(布尔字段)来禁用对由另一个处理程序代码引起的事件的处理。
private void chk_PeelTrace_CheckedChanged(object sender, EventArgs e)
{
if (handleChecked)
{
handleChecked=false;
// your handler code
handleChecked=true;
}
}
private void chk_MoveTrace_CheckedChanged(object sender, EventArgs e)
{
if (handleChecked)
{
handleChecked=false;
// your handler code
handleChecked=true;
}
}
因为我已经理解了这个问题,你希望两者都是假的,但不应该同时都是真的,那么试试下面这个简单的代码怎么样:
private void chk_PeelTrace_CheckedChanged(object sender, EventArgs e)
{
if (chk_PeelTrace.Checked)
{
chk_MoveTrace.Checked = false;
}
}
private void chk_MoveTrace_CheckedChanged(object sender, EventArgs e)
{
if (chk_MoveTrace.Checked)
{
chk_PeelTrace.Checked = false;
}
}
这对我来说也很好