TreeView节点选择

时间:2014-06-22 12:48:57

标签: c# winforms file treeview selection

我遇到节点选择问题。这就是我想要实现的目标:

+ [ ] Directory1
- [x] Files
       [ ] File1
       [ ] File2
       [ ] File3
       [ ] File4
       [ ] File5
       [ ] File6

当我点击文件(启用了复选框)时,它只选择文件文件夹节点,但我希望它在单个目录选择时检查并选择整个文件(即通过单击文件,它选择其中包含的所有文件) 。虽然该目录中有数千个文件,但无法手动检查每个文件。

我想我在这里遗漏了一些东西。

private void SetCheck(TreeNode node, bool check)
{
    foreach (TreeNode n in node.Nodes)
    {
        n.Checked = check;

        if (n.Nodes.Count != 0)
        {
            SetCheck(n, check);
        }
    }
}

和/或

private void GetCheckedFiles(TreeNode node, List<string> fileNames)
{
    if (node.Nodes.Count == 0)
    {
        if (node.Checked)
        {
            fileNames.Add(node.FullPath);
        }
    }
    else
    {
        foreach (TreeNode n in node.Nodes)
        {
            GetCheckedFiles(n, fileNames);
        }
    }
}

1 个答案:

答案 0 :(得分:0)

假设您的代码是从AfterCheck事件运行的,那么您必须删除处理程序或使用变量来防止每次针对受SetCheck例程影响的每个节点的复选标记更改时运行相同的代码。

示例:

private bool ignoreCheckEvent = false;

void treeView1_AfterCheck(object sender, TreeViewEventArgs e) {
  if (!ignoreCheckEvent) {
    ignoreCheckEvent = true;
    SetCheck(e.Node, e.Node.Checked);
    ignoreCheckEvent = false;  
  }
}