//子级方法
private void checkAllChildren(TreeNode nodeParent)
{
for( int i = nodeParent.Nodes.Count - 1; i>=0; i-- )
{
if (nodeParent.Nodes[i].Checked!= nodeParent.Checked)
{
nodeParent.Nodes[i].Checked = nodeParent.Checked;
if (nodeParent.Nodes[i].Nodes.Count>0)
{
checkAllChildren(nodeParent.Nodes[i]);
}
}
}
}
//父级方法
private void checkParent(TreeNode nodeChild)
{
nodeChild.Parent.Checked = nodeChild.Checked;//false or true
for( int i = nodeChild.Parent.Nodes.Count - 1; i>=0; i-- )
{
if (nodeChild.Parent.Nodes[i].Checked)
{
nodeChild.Parent.Checked = true;//true
}
}
if (nodeChild.Parent.Parent!=null)
{
checkParent(nodeChild.Parent);
}
}
//在treeview 的 afterselect 事件里调用
private void tviewAdmin_AfterSelect(object sender, System.Windows.Forms.TreeViewEventArgs e)
{
if (e.Node==null)
{
return;
}
if(e.Node.Nodes.Count > 0)
{
this.tviewAdmin.AfterCheck -= new System.Windows.Forms.TreeViewEventHandler (this.tviewAdmin_AfterSelect);
checkAllChildren(e.Node);
this.tviewAdmin.AfterCheck += new System.Windows.Forms.TreeViewEventHandler(this.tviewAdmin_AfterSelect);
}
if (e.Node.Parent!=null)
{
this.tviewAdmin.AfterCheck -= new System.Windows.Forms.TreeViewEventHandler(this.tviewAdmin_AfterSelect);
checkParent(e.Node);
this.tviewAdmin.AfterCheck += new System.Windows.Forms.TreeViewEventHandler(this.tviewAdmin_AfterSelect);
}
}