您的位置:首页 > 编程语言 > C#

c#,winform,treeview,选中节点,选中相应的全部子节点,取消节点,取消父节点,小技巧

2009-08-25 16:52 639 查看
在开发的时候经常使用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);
}
}
}
}

原文:http://www.cnblogs.com/virusswb/archive/2008/08/06/1261845.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐