我在C#Winform上有一系列复选框。每个复选框都有一些选项,这实际上只是另一组复选框,只是稍微缩进页面。
我想要实现的是当您勾选其中一个父复选框时,它的所有子复选框都会被勾选。如果取消选中父级复选框,那么相反,其所有子复选框都将被取消选中。
然后我需要拥有它,以便如果一个子复选框被勾选,那么它会勾选它的父级,或者至少确保父级被勾选。也就是说,如果没有父母,你就不能生孩子。如果一个孩子被解雇,那么如果所有其他孩子都没有被解雇,那么父母就必须被解雇。
我正在使用复选框上的事件处理程序执行此操作,但我反对使用游标检查子项然后以编程方式检查父项然后以编程方式检查其所有子项的问题。
我非常喜欢任何关于如何编程的建议,以免它出现这样的问题。
答案 0 :(得分: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都绑定到我的示例的相同处理程序。
希望有所帮助!
显然,这是一些假设,因为它只是一个例子。我依靠用户输入(聚焦属性)来控制流量。还有其他解决方案,我敢肯定。
答案 1 :(得分:2)
您还可以使用TreeView.CheckBoxes = true的树视图控件。这样,默认情况下你已经拥有了层次结构。