在 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# - 查找树视图控件的特定节点或子节点

当我取消选中自定义树视图中的子节点复选框时,如何取消选中所有父节点

C# winform treeview 节点展开状态的图标设置

在 C# windows 窗体中的树视图中面临问题,详细信息如下:

C#如何实现树型菜单