如何根据CheckBox状态更改ListBox选择,反之亦然?

时间:2014-05-28 13:19:16

标签: c# winforms checkbox listbox controls

我的ListBox充满了某些工作的状态。为了使它更容易静态,所以包含预定义的值。我有三个CheckBoxes all open closed 我想要的是: enter image description here enter image description here enter image description here enter image description here

第一个问题: 使用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个checkBoxlistBox,但它已经死了。

第二个问题: 这基本上是无限循环问题,但反过来说。如果用户仅选择listBox中的前三项,则我不希望选中CheckBoxes,而是openCheckedChange这会再次触发ListBox事件,该事件设置SelectedIndexChanged个所选项,触发{{1}} ...等等。我该如何打破这个?

3 个答案:

答案 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 - 事件,并根据需要更改代码。

相关问题