TreeView 通常和CheckBoxs一起使用,顯示並選擇一些條目,特別是在等級分割的狀態下,例如
當我選擇一個父節點,希望該父節點下所有的子節點都被選中,取消一個節點,希望他所有的父節點都取消,例如
代碼如下所示<喎?http://www.Bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxwcmUgY2xhc3M9"brush:java;">
//取消節點選中狀態之後,取消所有父節點的選中狀態
private void setParentNodeCheckedState(TreeNode currNode, bool state)
{
TreeNode parentNode = currNode.Parent;
parentNode.Checked = state;
if (currNode.Parent.Parent != null)
{
setParentNodeCheckedState(currNode.Parent, state);
}
}
//選中節點之後,選中節點的所有子節點
private void setChildNodeCheckedState(TreeNode currNode, bool state)
{
TreeNodeCollection nodes=currNode.Nodes;
if (nodes.Count > 0)
{
foreach (TreeNode tn in nodes)
{
tn.Checked = state;
setChildNodeCheckedState(tn, state);
}
}
}
private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)
{
if (e.Action == TreeViewAction.ByMouse)
{
textBox1.Text = e.Node.Text;
if (e.Node.Checked == true)
{
//選中節點之後,選中該節點所有的子節點
setChildNodeCheckedState(e.Node, true);
}
else if(e.Node.Checked == false)
{
//取消節點選中狀態之後,取消該節點所有子節點選中狀態
setChildNodeCheckedState(e.Node, false);
//如果節點存在父節點,取消父節點的選中狀態
if (e.Node.Parent != null)
{
setParentNodeCheckedState(e.Node, false);
}
}
}
}