在開發的時候經常使用treeview控制項來顯示組織圖啊,目錄結構啊,通常會結合屬性checkedboxs,來做選中,取消的操作
下面是一個選中,取消的小例子,選中節點的時候,如果節點存在子節點,可以選中全部的子節點;如果取消一個節點的選中狀態,當前節點同時又存在父節點的話,就取消父節點的選中狀態。
:
代碼如下:
Code
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace WindowsApplication6
{
public partial class TreeViewTest : Form
{
public TreeViewTest()
{
InitializeComponent();
}
private void TreeViewTest_Load(object sender, EventArgs e)
{
treeView1.ExpandAll();
}
private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)
{
if (e.Action == TreeViewAction.ByMouse)
{
textBox1.Text = e.Node.Text;
if (e.Node.Checked)
{
//取消節點選中狀態之後,取消所有父節點的選中狀態
setChildNodeCheckedState(e.Node, true);
}
else
{
//取消節點選中狀態之後,取消所有父節點的選中狀態
setChildNodeCheckedState(e.Node, false);
//如果節點存在父節點,取消父節點的選中狀態
if (e.Node.Parent != null)
{
setParentNodeCheckedState(e.Node, false);
}
}
}
}
//取消節點選中狀態之後,取消所有父節點的選中狀態
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);
}
}
}
}