【发布时间】:2021-04-01 23:19:23
【问题描述】:
如果您需要比我提供的更多信息,第一篇文章和一个新的编码器对我来说如此裸露。我正在尝试使用层次结构中的复选框创建树视图(见图)。我的问题是我想创建某种递归,当父节点被选中时取消选择并选择子节点,反之亦然。
我正在将 VS 与 winforms 一起使用,并在谷歌上搜索了 2 天以了解如何执行此操作,不幸的是,在线示例对我来说太高级或不起作用。我发现了一个Tutorial,关于如何使用不确定的复选框完全做到这一点,这将是一个很大的好处,但它适用于 WPF。
我设法通过一些在线示例创建了能够(取消)检查所有按钮的按钮。请有人指导,一个到目前为止发现编程令人惊叹的初学者,朝着正确的方向发展:)
private void button_checkAllNodes_Click(object sender, EventArgs e)
{
checkAllNodes(treeView1.Nodes);
}
private void button_uncheckAllNodes_Click(object sender, EventArgs e)
{
UncheckAllNodes(treeView1.Nodes);
}
public void checkAllNodes(TreeNodeCollection nodes)
{
foreach (TreeNode node in nodes)
{
node.Checked = true;
checkChildren(node, true);
}
}
public void UncheckAllNodes(TreeNodeCollection nodes)
{
foreach (TreeNode node in nodes)
{
node.Checked = false;
checkChildren(node, false);
}
}
private void checkChildren(TreeNode rootNode, bool isChecked)
{
foreach (TreeNode node in rootNode.Nodes)
{
checkChildren(node, isChecked);
node.Checked = isChecked;
}
}
private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
{
}
【问题讨论】:
-
不确定您的问题是什么。我唯一看到错误的是 rootNode.Nodes 为空。因此,当 rootNode.Nodes 为空时,您需要一个 IF 语句从 CheckAllNodes/UnCheckAllNodes 返回。
标签: c# winforms recursion treeview child-nodes