我的ListBox
充满了某些工作的状态。为了使它更容易静态,所以包含预定义的值。我有三个CheckBoxes
: all
, open
和 closed
。
我想要的是:
第一个问题:
使用CheckedChanged
事件更新其他控件,我会生成无限循环。
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
if(checkBox1.Checked)
{
checkBox2.Checked = true;
//etc.
}
//etc.
}
private void checkBox2_CheckedChanged(object sender, EventArgs e)
{
if(checkBox2.Checked && checkBox3.Checked)
{
checkBox1.Checked = true; //this immediately triggers checkBox1_CheckedChanged
//etc.
}
//etc.
}
此时虽然我没有开始管理第3个checkBox
和listBox
,但它已经死了。
第二个问题:
这基本上是无限循环问题,但反过来说。如果用户仅选择listBox
中的前三项,则我不希望选中CheckBoxes
,而是open
。CheckedChange
这会再次触发ListBox
事件,该事件设置SelectedIndexChanged
个所选项,触发{{1}} ...等等。我该如何打破这个?
答案 0 :(得分:1)
如果要在不触发事件的情况下更改选中的值,只需删除事件处理程序,然后重新应用它。
checkBox1.CheckedChanged -= checkBox1_CheckedChanged;
checkBox1.Checked = true;
checkBox1.CheckedChanged += checkBox1_CheckedChanged;
在想要设置的地方应用此选项Checked = true。
答案 1 :(得分:1)
对于“全部”复选框,根据马特的答案,我将使用以下作为checkBox1的CheckedChanged事件......
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
checkBox2.CheckedChanged -= checkBox2_CheckedChanged;
checkBox3.CheckedChanged -= checkBox3_CheckedChanged;
checkBox2.Checked = checkBox1.Checked;
checkBox3.Checked = checkBox1.Checked;
checkBox2.CheckedChanged += checkBox2_CheckedChanged;
checkBox3.CheckedChanged += checkBox3_CheckedChanged;
// etc.
}
这样,如果单击All复选框,它将同时检查并取消选中其他2个框。
答案 2 :(得分:0)
这里的问题是CheckedChanged
- 事件。尝试将其更改为Click
- 事件,并根据需要更改代码。