我遇到节点选择问题。这就是我想要实现的目标:
+ [ ] 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);
}
}
}
答案 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;
}
}