2009-11-04 114 views
2

我有一个C#Winform的复选框序列。每个复选框都可以有一些选项,这实际上只是另一组复选框,它们只是在页面中缩进一点。分层winform复选框

我想要达到的是当您勾选父复选框之一,然后所有它的孩子复选框被打勾。相反,当一个父复选框未被选中时,它的所有子复选框都未被选中。

然后,我需要这样做,如果一个孩子复选框得到勾选,然后它蜱它的父母,或至少确保父母打勾。也就是说,如果没有父母,你就不会有孩子。如果一个孩子没有被打破,那么如果所有其他的孩子都未被打破,那么父母就不需要打破了。

我正在做复选框上的事件处理程序,但我遇到了问题,用光标检查一个子然后以编程方式检查父程序然后以编程方式检查它的所有子项。

我会非常appriciate关于如何编程这样的方式,它没有这样的问题的任何意见。

+0

我怀疑你可能使用CheckedChanged事件而不是Click事件,请张贴你正在使用的代码。 – Lazarus 2009-11-04 17:00:21

回答

3

像这样的东西应该工作。

private void checkBox1_CheckedChanged(object sender, EventArgs e) 
    { 
     if (checkBox1.Focused) 
     { 
      checkBox2.Checked = checkBox1.Checked; 
      checkBox3.Checked = checkBox1.Checked; 
      checkBox4.Checked = checkBox1.Checked; 
     } 
    } 

    private void subCheckBox_CheckedChanged(object sender, EventArgs e) 
    { 
     CheckBox theCheckbox = sender as CheckBox; 
     if (theCheckbox.Focused) 
     { 
      checkBox1.Checked = checkBox2.Checked || checkBox3.Checked || checkBox4.Checked; 
     } 
    } 

复选框2,3和4都与我的示例绑定到相同的处理程序。

希望有帮助!


显然,这只是一些假设,因为它只是一个例子。我依靠用户输入(聚焦属性)来控制流量。我敢肯定,还有其他解决方案。

+0

啊我明白了,所以如果复选框是专注的话,你只能做些事情,从而避免我遇到的问题。辉煌。谢谢 – 2009-11-04 21:05:44

2

您还可以使用TreeView控件和TreeView.CheckBoxes = true。这样你就默认已经有了分层结构。

+0

我考虑过使用这个,但我需要做一些奇怪的事情,我没有在这里提到,TreeView不支持。谢谢你的建议 – 2009-11-04 21:06:53