使用C#,我试图在两个复选框之间创建一个关系:
1. chk_PeelTrace
和2. chk_MoveTrace
,
其中一次只能检查一个复选框,以便PeelTrace
启动时为真,并且我检查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;
}
}
答案 0 :(得分:1)
你几乎就在那里,只需添加一些标志(布尔字段)来禁止处理由另一个处理程序代码引起的事件。
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;
}
}
答案 1 :(得分:0)
因为我已经理解了你想要两个都是假的问题,但两者都不应该同时存在,那么如何尝试下面这个简单的代码:
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;
}
}
这对我来说也很好