【问题标题】:hierarchical winform checkboxes分层 Winform 复选框
【发布时间】:2009-11-05 03:26:26
【问题描述】:

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

我想要实现的是,当您勾选其中一个父复选框时,它的所有子复选框都会被勾选。相反,当父复选框未选中时,其所有子复选框均未选中。

然后我需要它,以便如果子复选框被勾选,那么它会勾选它的父级,或者至少确保父级被勾选。也就是说,没有父母就不能生孩子。如果一个孩子没有被勾选,那么如果所有其他孩子都没有被勾选,那么父母也需要被取消。

我正在使用复选框上的事件处理程序来执行此操作,但我遇到了以下问题:使用光标检查子项然后以编程方式检查父项,然后以编程方式检查其所有子项。

对于如何以不会出现此类问题的方式对其进行编程的任何建议,我将非常感谢。

【问题讨论】:

  • 我怀疑您使用的可能是 CheckedChanged 事件而不是 Click 事件,请发布您正在使用的代码。

标签: c# winforms checkbox


【解决方案1】:

这样的事情应该可以工作。

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

希望有帮助!


显然,这只是一个示例,因此做出了一些假设。我依靠用户输入(Focused 属性)来控制流程。我敢肯定,还有其他解决方案。

【讨论】:

  • 啊,我明白了,所以你只有在复选框被聚焦时才做一些事情,从而避免了我遇到问题的检查链。杰出的。谢谢
【解决方案2】:

您还可以将 TreeView 控件与 TreeView.CheckBoxes = true 一起使用。这样一来,默认情况下您就已经有了层次结构。

【讨论】:

  • 我确实考虑过使用它,但我需要做一些奇怪的事情,我在这里没有提到 TreeView 不支持。还是谢谢你的建议
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-17
  • 2014-07-09
  • 1970-01-01
  • 1970-01-01
  • 2013-04-03
  • 1970-01-01
相关资源
最近更新 更多