我在C# Winform上有一系列的复选框。每个复选框都可以有一些选项,这实际上是另一组复选框,只是在页面上缩进一点而已。
我试图实现的是,当您勾选其中一个父复选框时,它的所有子复选框都会被勾选。反之,当父复选框未勾选时,它的所有子复选框都不勾选。
然后我需要有它,这样如果一个子复选框被勾选,那么它就会勾选它的父复选框,或者至少确保父复选框被勾选。没有父母你就不能有孩子。如果某个子节点未勾选,则如果所有其他子节点都未勾选,则需要取消勾选父节点。
我是用复选框上的事件处理程序来做这件事的,但我遇到了这样一个问题,即用光标检查一个子对象,然后以编程方式检查父对象,然后以编程方式检查它所有的子对象。
我非常喜欢任何关于如何编程的建议,这样它就不会有这样的问题。
发布于 2009-11-05 01:12:21
像这样的东西应该行得通。
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都绑定到同一个处理程序。
希望这能有所帮助!
显然,这做了一些假设,因为它只是一个例子。我依靠用户输入(焦点属性)来控制流程。我相信,还有其他的解决方案。
发布于 2009-11-05 01:12:40
您还可以使用TreeView.CheckBoxes = true的treeview控件。这样,默认情况下,您就已经有了层次结构。
https://stackoverflow.com/questions/1675151
复制相似问题