在 C# 中,如何在加载树视图后立即将所有树节点设置为真

In C#, how to set all tree nodes checked true just after treeview loaded

我在 C# 中的 WindowForm 构建中有一个 TreeView。在 treeview 中,文件正在成功加载。我还实现了复选框,显示在每个树节点的前面。

现在,在 treeviewtreeview[中加载所有目录后,我希望所有 checkboxes 默认 checked true =33=]。 我尝试了以下代码但没有运气。它只检查根节点,而不是所有子节点。 第一种方法 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;
            }
        }

以下是我的树视图的快照 -

另一个疑惑是,如何处理on treeview load event? c# 中是否有任何特定的东西来检测树视图加载事件?

我是C#的初学者,请帮助我。谢谢!

您还需要一个递归函数来检查所有子节点。 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);
     }
 }

首先替换下面的代码

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);
    }
}

亲切