gpt4 book ai didi

c# - 如果在 TreeView 中选中任何单个子节点,则选择父节点

转载 作者:行者123 更新时间:2023-11-30 13:47:15 26 4
gpt4 key购买 nike

我有一个包含一些父节点和子节点的 TreeView 。如果选择了子节点,则应选择父节点。此功能运行良好,但如果父节点有多个子节点,并且我检查了多个子节点并取消选中单个子节点,则父节点将被取消选中。

如果选择了子节点,我已经完成了一些选择父节点的代码。

private bool updatingTreeView;

private void treSelector_AfterCheck(object sender, TreeViewEventArgs e)
{
if (updatingTreeView) return;
updatingTreeView = true;
SelectParents(e.Node, e.Node.Checked);
updatingTreeView = false;
}

private void SelectParents(TreeNode node, Boolean isChecked)
{
if (node.Parent != null)
{
node.Parent.Checked = isChecked;
SelectParents(node.Parent, isChecked);
}
}

如果该父节点的任何单个子节点被检查,我不想要未经检查的父节点。

最佳答案

private void SelectParents(TreeNode node, Boolean isChecked)
{
var parent = node.Parent;

if (parent == null)
return;

if (isChecked)
{
parent.Checked = true; // we should always check parent
SelectParents(parent, true);
}
else
{
if (parent.Nodes.Cast<TreeNode>().Any(n => n.Checked))
return; // do not uncheck parent if there other checked nodes

SelectParents(parent, false); // otherwise uncheck parent
}
}

相同,重构

private void SelectParents(TreeNode node, Boolean isChecked)
{
var parent = node.Parent;

if (parent == null)
return;

if (!isChecked && HasCheckedNode(parent))
return;

parent.Checked = isChecked;
SelectParents(parent, isChecked);
}

private bool HasCheckedNode(TreeNode node)
{
return node.Nodes.Cast<TreeNode>().Any(n => n.Checked);
}

关于c# - 如果在 TreeView 中选中任何单个子节点,则选择父节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18234961/

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