1: TreeView中2层数据,父节点选中后,自动选中所有子节点
2:把第二层数据添加到 ListBox中
3:如果数据已经在ListBox中存在,则不添加
4:可以删除ListBox中选中数据
类:TreeViewCheck 用于实现父节点选中后,自动选中所有子节点
代码
1 public static class TreeViewCheck
2 {
3 /// <summary>
4 /// 系列节点 Checked 属性控制
5 /// </summary>
6 /// <param name="e"></param>
7 public static void CheckControl(TreeViewEventArgs e)
8 {
9 if (e.Action != TreeViewAction.Unknown)
10 {
11 if (e.Node != null)
12 {
13 CheckParentNode(e.Node, e.Node.Checked);
14 }
15 if (e.Node.Nodes.Count > 0)
16 {
17 CheckAllChildNodes(e.Node, e.Node.Checked);
18 }
19 }
20 }
21 #region 私有方法
22 //改变所有子节点的状态
23 private static void CheckAllChildNodes(TreeNode pn, bool IsChecked)
24 {
25 foreach (TreeNode tn in pn.Nodes)
26 {
27 tn.Checked = IsChecked;
28 if (tn.Nodes.Count > 0)
29 {
30 CheckAllChildNodes(tn, IsChecked);
31 }
32 }
33 }
34 //改变父节点的选中状态
35 private static void CheckParentNode(TreeNode curNode, bool IsChecked)
36 {
37 bool bChecked = true;
38 if (curNode.Parent != null)
39 {
40 foreach (TreeNode node in curNode.Parent.Nodes)
41 {
42 if (node.Checked == false)
43 {
44 bChecked = false;
45 break;
46 }
47 }
48 if (bChecked)
49 {
50 curNode.Parent.Checked = true;
51 CheckParentNode(curNode.Parent, true);
52 }
53 else
54 {
55 curNode.Parent.Checked = false;
56 CheckParentNode(curNode.Parent, false);
57 }
58 }
59 }
60 #endregion
61 }
TreeView中选中或取消节点触发:
private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)
{
TreeViewCheck.CheckControl(e);
}
添加TreeView中选中项的值到listBox中
代码
private void button1_Click(object sender, EventArgs e)
{
foreach (TreeNode node in treeView1.Nodes)
{
foreach (TreeNode nd in node.Nodes)
{
if (nd.Checked)
{
if (VerifyNotExist(nd.Text))
{
listBox1.Items.Add(nd.Text);
}
}
}
}
}
public bool VerifyNotExist(string theNodeText)
{
//便利listBox1中的项目,如果已经存在,返回False
for (int i = 0; i < listBox1.Items.Count; i++)
{
if (theNodeText == listBox1.Items[i].ToString())
{
return false;
}
}
//如果不存在,返回True
return true;
}
//删除选中项
代码
//ListBox.SelectedIndexCollection indices = listBox1.SelectedIndices;
// int count = indices.Count;
// listBox1.BeginUpdate();
// for (int i = 0; count != 0; i++)
// {
// listBox1.Items.RemoveAt(indices[0]);
// count--;
// }
//listBox1.EndUpdate();
while (listBox1.SelectedIndex != -1)
{
listBox1.Items.Remove(listBox1.SelectedItem);
}
删除ListBox中所有项
listBox1.Items.Clear();