在 C# 中,如何在加载树视图后将所有树节点设置为 true [重复]
Posted
技术标签:
【中文标题】在 C# 中,如何在加载树视图后将所有树节点设置为 true [重复]【英文标题】:In C#, how to set all tree nodes checked true just after treeview loaded [duplicate] 【发布时间】:2020-03-15 20:39:12 【问题描述】:我在 C# 中的 WindowForm
构建中有一个 TreeView
。在那个 treeview 中,文件正在成功加载。我还实现了复选框,显示在每个树节点的前面。
现在,我希望在 treeview 中加载所有目录之后,默认选中所有 复选框。
我尝试了以下代码,但没有运气。它只检查根节点,而不是所有子节点。
第一种方法btnDirectoryPath_Click(object sender, EventArgs e)
是用于选择正在加载的目录路径的按钮单击。从这里,我打电话给setAllCheckedTrue(TreeView treeView1)
private void btnDirectoryPath_Click(object sender, EventArgs e)
folderBrowserDialog1.SelectedPath = txtDirectoryPath.Text;
DialogResult drResult = folderBrowserDialog1.ShowDialog();
if (drResult == System.Windows.Forms.DialogResult.OK)
txtDirectoryPath.Text = folderBrowserDialog1.SelectedPath;
// Setting Inital Value of Progress Bar
progressBar1.Value = 0;
// Clear All Nodes if Already Exists
treeView1.Nodes.Clear();
toolTip1.ShowAlways = true;
if (txtDirectoryPath.Text != "" && Directory.Exists(txtDirectoryPath.Text))
//Loading all directories and sub directories and files
LoadDirectory(txtDirectoryPath.Text);
//setting all checkboxes true by default on loading.
setAllCheckedTrue(treeView1);
else
MessageBox.Show("Select Directory!!");
private void setAllCheckedTrue(TreeView treeView1)
foreach(TreeNode treeNode in treeView1.Nodes)
treeNode.Checked = true;
以下是我的树视图的快照 -
另一个疑问是,如何处理在树视图加载事件? c# 中是否有任何特定的东西来检测树视图加载事件?
我是 C# 的初学者,如果可能,请帮助我。谢谢!
【问题讨论】:
更新函数“setAllCheckedTrue”以处理具有子节点的节点。在“treeNode.Checked = true;”行之后,添加当前行: if (treeNode.Nodes.Count > 0) )setAllCheckedTrue(treeNode). 【参考方案1】:您还需要一个递归函数来检查所有子节点。 TreeView 不会自动执行此操作。 当您取消选择子节点时,您还必须考虑如何处理父节点的更新。
尝试这样的方法来设置子节点:
private void SetAllCheckedTrue(TreeView treeView1)
foreach(TreeNode treeNode in treeView1.Nodes)
SetTreeNodeCheckbox(treeNode , true);
private void SetTreeNodeCheckbox(TreeNode treeNode , bool value)
treeNode.Checked = value;
foreach(var subNode in currentNode)
SetTreeNodeCheckbox(subNode, value);
【讨论】:
谢谢,伙计!我只是错过了这个逻辑 ;-) 事实上,我在其他场景中实现了这一点。【参考方案2】:先替换下面的代码
setAllCheckedTrue(treeView1);
按照以下说明
foreach(TreeNode node in treeView1.Nodes)
setAllCheckedTrue (node);
这将更改发送到函数“setAllCheckedTrue”的参数类型,该函数将成为节点而不是树视图,并使用以下函数更新 setAllCheckedTrue 函数
private void setAllCheckedTrue(TreeNode node)
node.Checked = true;
foreach(TreeNode childnode in node.Nodes)
setAllCheckedTrue (childnode);
真诚的
【讨论】:
已经解决了!不过,感谢您的回复!以上是关于在 C# 中,如何在加载树视图后将所有树节点设置为 true [重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何在kendo树视图中重新加载或刷新整个分支(父级+子级)
当我取消选中自定义树视图中的子节点复选框时,如何取消选中所有父节点
C# winform treeview 节点展开状态的图标设置