【发布时间】:2013-01-19 21:10:28
【问题描述】:
如何在 TreeView 中选中/取消选中所有子项? 当其中一项变为选定状态并且子项已选中/未选中时,可能会发生错误。
private void Form1_Load(object sender, EventArgs e)
{
treeView1.CheckBoxes = true;
treeView1.BeginUpdate();
treeView1.Nodes.Add("1111");
treeView1.Nodes[0].Nodes.Add("2222");
treeView1.Nodes[0].Nodes.Add("2222");
treeView1.Nodes[0].Nodes.Add("2222");
treeView1.Nodes[0].Nodes.Add("2222");
treeView1.Nodes[0].Nodes[1].Nodes.Add("3333");
treeView1.Nodes[0].Nodes[1].Nodes[0].Nodes.Add("4444");
treeView1.Nodes[0].Nodes[1].Nodes[0].Nodes.Add("4444");
treeView1.Nodes[0].Nodes[1].Nodes[0].Nodes.Add("4444");
treeView1.EndUpdate();
treeView1.ExpandAll();
}
private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)
{
treeView1.BeginUpdate();
foreach (TreeNode Node in e.Node.Nodes)
{
Node.Checked = e.Node.Checked;
}
treeView1.EndUpdate();
}
【问题讨论】:
-
什么?如果您需要检查所有子节点,请递归执行。
-
安德烈你需要做一些递归调用例如
public void UncheckAllNodes(TreeNodeCollection nodes) { foreach (TreeNode node in nodes) { node.Checked = false; CheckChildren(node, false); } } -
对于 CheckChildern(node,false) 执行此操作
private void CheckChildren(TreeNode rootNode, bool isChecked) { foreach (TreeNode node in rootNode.Nodes) { CheckChildren(node, isChecked); node.Checked = isChecked; } } -
@DJKRAZE:为什么不回答这个问题?