【发布时间】:2014-08-12 15:14:57
【问题描述】:
我在选择节点时遇到问题。这是我想要实现的目标:
+ [ ] 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);
}
}
}
【问题讨论】:
-
不是设置子checkBoxes吗?这是 WinForms 还是 WPF?
-
确定您忽略了某些内容,将代码发布到调用此代码的事件处理程序中。设置 TreeNode.Checked 属性将导致事件再次触发,从而导致各种不当行为。您通常需要一个 bool 字段来防止它再次调用 SetCheck()。
-
@RodrigoSilva:是的,它是 WinForms。
-
@HansPassant:您能告诉我如何处理代码吗?我没有太多编程经验。因为我是新手。这就是为什么在获得理论观点时会遇到问题。
-
我注意到您忘记发布事件处理程序的代码。这不是理论上的。
标签: c# winforms file treeview selection