gpt4 book ai didi

c# - 如何获得 TreeNodes 的 TreeView 行为,当您检查一个时,它会检查其所有子 TreeNodes?

转载 作者:行者123 更新时间:2023-11-30 20:13:08 33 4
gpt4 key购买 nike

这与大多数应用的行为方式相同。我认为 TreeView 默认情况下是这样工作的。

有没有办法做到这一点,还是我必须让已检查的 TreeNode 的所有子节点并自己检查它们?

这是 winforms。

最佳答案

你需要自己做,另一方面也不是很难:

private void TreeView_AfterCheck(object sender, TreeViewEventArgs e)
{
SetChildrenChecked(e.Node, e.Node.Checked);
}

private void SetChildrenChecked(TreeNode treeNode, bool checkedState)
{
foreach (TreeNode item in treeNode.Nodes)
{
item.Checked = checkedState;
}
}

这负责检查和取消检查所有子节点(不管有多少层可能有子节点)。

更新
扩展的代码示例,如果所有子节点都被手动选中或取消选中,也将选中/取消选中父节点(未经过全面测试,可能可以更优雅地完成):

private void TreeView_AfterCheck(object sender, TreeViewEventArgs e)
{
SetChildrenChecked(e.Node, e.Node.Checked);

if (e.Node.Parent != null)
{
bool setParentChecked = true;
foreach (TreeNode node in e.Node.Parent.Nodes)
{
if (node.Checked != e.Node.Checked)
{
setParentChecked = false;
break;
}
}
if (setParentChecked)
{
e.Node.Parent.Checked = e.Node.Checked;
}
}
}

private void SetChildrenChecked(TreeNode treeNode, bool checkedState)
{
foreach (TreeNode item in treeNode.Nodes)
{
if (item.Checked != checkedState)
{
item.Checked = checkedState;
}
}
}

SetChildrenChecked 方法中添加的 if block 将防止 StackOverflowException 在您检查具有子节点的节点时,它们会被检查,并且当最后一个被检查父级(你点击的那个)被检查并再次触发 AfterCheck 事件(这让我有点惊讶;我不希望当 Checked 属性值不会改变,而只是被赋予它已经拥有的相同值,但事件再次被称为AfterCheck,而不是AfterCheckedChanged)。

关于c# - 如何获得 TreeNodes 的 TreeView 行为,当您检查一个时,它会检查其所有子 TreeNodes?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1870455/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com