C#winform treeView checkbox全选反选
private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)
{
if (e.Action != TreeViewAction.Unknown)
{
/*
* 因为每个节点复选框的状态改变后都会引发 AfterCheck 事件,
* 我们为了避免无限次地进入递归中,就需要判断TreeViewAction的状态,
* 所有被我们使用代码自动选中的节点的TreeViewAction 状态为 Unknown,
* 因为可以避免我们调用递归过程的时候出问题。
*/
CheckAllChildNodes(e.Node, e.Node.Checked);
//当所有子节点选中,使父节点选中
bool bolChecked = true;
if (e.Node.Parent != null)
{
for (int i = 0; i < e.Node.Parent.Nodes.Count; i++)
{
if (e.Node.Parent.Nodes[i].Checked==false)
bolChecked = false;
}
e.Node.Parent.Checked = bolChecked;
}
}
}
public void CheckAllChildNodes(TreeNode treeNode, bool nodeChecked)
{
foreach (TreeNode node in treeNode.Nodes)
{
node.Checked = nodeChecked;
if (node.Nodes.Count > 0)
{
this.CheckAllChildNodes(node, nodeChecked);
}
}
}