代码之家  ›  专栏  ›  技术社区  ›  Daniel Revell

层次WinForm复选框

  •  2
  • Daniel Revell  · 技术社区  · 16 年前

    我在C WinForm上有一系列的复选框。每个复选框上都可以有一些选项,这实际上只是另一组只缩进到页面中的复选框。

    我试图实现的是,当你勾选其中一个父复选框时,它的所有子复选框都会被勾选。相反,当取消选中父复选框时,它的所有子复选框都将取消选中。

    然后我需要它,这样如果一个子复选框被勾选,那么它就会勾选它的父项,或者至少确保父项被勾选。没有父母你不能生孩子。如果一个孩子没有被勾选,那么如果所有其他的孩子都没有被勾选,那么父母就需要被勾选。

    我使用复选框上的事件处理程序执行此操作,但遇到了这样一个问题:先用光标检查子项,然后用程序检查父项,然后用程序检查所有子项。

    我会非常重视任何关于如何以这样一种方式进行编程的建议,它不会有这样的问题。

    2 回复  |  直到 16 年前
        1
  •  3
  •   itsmatt    16 年前

    像这样的东西应该管用。

        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都绑定到同一个处理程序。

    希望有帮助!


    很明显,这只是一个例子,所以做了一些假设。我依靠用户输入(关注的属性)来控制流。我相信还有其他的解决办法。

        2
  •  2
  •   Ehz    16 年前

    也可以使用TreeView控件,其中TreeView.CheckBox=true。这样,默认情况下您已经拥有了层次结构。

    推荐文章