我在我的windows应用程序中有一个树视图,在树视图中有复选框,我有一些“父节点”和一些“子节点”,我想在单击“全部选中”和“全部取消选中”按钮时一次选中和取消选中父节点和子节点...我应该如何做?
lf3rwulv1#
请尝试以下操作:
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_AfterCheck(object sender, TreeViewEventArgs e) { CheckChildren(e.Node, e.Node.Checked); }
5jdjgkvh2#
尝试
private void CheckUncheckTreeNode(TreeNodeCollection trNodeCollection, bool isCheck) { foreach (TreeNode trNode in trNodeCollection) { trNode.Checked = isCheck; if (trNode.Nodes.Count > 0) CheckUncheckTreeNode(trNode.Nodes, isCheck); } }
将treeView.Nodes传递给这个函数,就像在button click事件中传递CheckUncheckTreeNode(trView.Nodes, true);一样,以检查所有节点。要取消选中所有节点,请执行CheckUncheckTreeNode(trView.Nodes, false);。
treeView.Nodes
CheckUncheckTreeNode(trView.Nodes, true);
CheckUncheckTreeNode(trView.Nodes, false);
3yhwsihp3#
对于ASP.NET WEB应用程序:
Button_Click() { CheckUncheckTreeNode(YourTreeView.Nodes, false); } private void CheckUncheckTreeNode(TreeNodeCollection trNodeCollection, bool isCheck) { foreach (TreeNode trNode in trNodeCollection) { trNode.Checked = isCheck; if (trNode.ChildNodes.Count > 0) CheckUncheckTreeNode(trNode.ChildNodes, isCheck); } }
m1m5dgzv4#
private void treeView1_AfterCheck(object sender, TreeViewEventArgs e) { if (e.Node.Checked) { UncheckNodes(treeView1.Nodes,e.Node); } } private void UncheckNodes(TreeNodeCollection nodes, TreeNode except) { foreach (TreeNode node in nodes) { if (node != except) node.Checked = false; UncheckNodes(node.Nodes, except); } }
pb3skfrl5#
您可以在不使用递归情况下使用此代码。
foreach (TreeNode Node in TreeNodeInUI.Nodes) { Node.Checked = false; }
3okqufwl6#
当我偶然发现一个类似的问题时,我找到了一个简洁的解决方案。是的,这是8年后的事了,但也许有人可以利用这个。每当选中TreeNode时,将此TreeNode存储在List中。当需要取消选中所有节点时,循环List并取消选中节点。这样,您可以只迭代受影响的节点。示例:
检查后将TreeNodes存储在列表中
public List<TreeNode> checkedNodes; private void treeView1_afterCheck(object sender, TreeViewEventArgs e) { foreach(TreeNode node in treeView1.Nodes) { if(node.checked) { checkedNodes.Add(node); } }
仅迭代选中的节点以取消选中所有节点
public void UncheckAllNodes() { foreach (TreeNode node in checkedNodes) { node.Checked = false; } }
当取消选中一个复选框时,这仍然缺少一个删除,但你得到了这个想法。
6条答案
按热度按时间lf3rwulv1#
请尝试以下操作:
编辑:选中分支以勾选/取消勾选所有子节点:
5jdjgkvh2#
尝试
将
treeView.Nodes
传递给这个函数,就像在button click事件中传递CheckUncheckTreeNode(trView.Nodes, true);
一样,以检查所有节点。要取消选中所有节点,请执行CheckUncheckTreeNode(trView.Nodes, false);
。3yhwsihp3#
对于ASP.NET WEB应用程序:
m1m5dgzv4#
pb3skfrl5#
您可以在不使用递归情况下使用此代码。
3okqufwl6#
当我偶然发现一个类似的问题时,我找到了一个简洁的解决方案。是的,这是8年后的事了,但也许有人可以利用这个。
每当选中TreeNode时,将此TreeNode存储在List中。当需要取消选中所有节点时,循环List并取消选中节点。这样,您可以只迭代受影响的节点。
示例:
检查后将TreeNodes存储在列表中
仅迭代选中的节点以取消选中所有节点
当取消选中一个复选框时,这仍然缺少一个删除,但你得到了这个想法。