我在我的Windows应用程序中的树视图和树形视图中有复选框,我有一些“父节点”和一些“子节点”,我想一次CHECK AND UNCHECK父节点和子节点单击“全部检查”和“取消全部选中”按钮...我该怎么做?
答案 0 :(得分:17)
尝试这样的事情:
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;
}
}
答案 1 :(得分:2)
尝试
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
传递给此函数,例如CheckUncheckTreeNode(trView.Nodes, true);
,以检查所有节点。要取消选中,请执行CheckUncheckTreeNode(trView.Nodes, false);
。
答案 2 :(得分:0)
对于ASP.NET WEB APPLICATION:
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);
}
}
答案 3 :(得分:0)
{{1}}
答案 4 :(得分:-1)
当我偶然发现一个类似的问题时,我找到了一个整洁而简单的解决方案。是的,已经8年了,但是也许有人可以利用它。
每当选中一个TreeNode时,就将此TreeNode存储在一个列表中。当需要取消选中所有节点时,循环列表并取消选中节点。这样,您只需迭代受影响的节点。
示例:
选中后将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;
}
}
在取消选中复选框时,它仍然缺少删除项,但是您知道了。