下面是treeview的用法
TreeView组件是由多个类来定义的,TreeView组件是由命名空
间"System.Windows .Forms"中的"TreeView"类来定义的,而其中的
节点(即Node),是由命名空间"System.Windows .Forms"中
的"TreeNode"来定义的。所以当在程序中创建一个TreeView对象,
其实只是创建了一个可以放置节点的"容器"。而在这个容器中加入
一个节点,其实就是加入了从"TreeNode"类中创建的一个节点对
象;同样删除一个节点,也就是删除一个"TreeNode"节点对象。

  一. 本文中介绍的程序设计及运行环境

   (1).微软视窗2000 服务器版

   (2)..Net Framework SDK 正式版

  二. C#操作TreeView组件中的一些常用方法以及具体实现:

  TreeView组件虽然是一个操作起来比较麻烦的组件,但归根到
底,可以总结为三种基本操作:加入子节点、加入兄弟节点和删除
节点。掌握了这三种常用操作,对于在编程中灵活运用TreeView组
件是十分必要的。下面就分别来加以介绍。

  (1).加入子节点:

  所谓子节点,就是处于选定节点的下一级节点。加入子节点的
具体过程是:首先要在TreeView组件中定位要加入的子节点的位
置,然后创建一个节点对象,然后利用TreeVeiw类中对节点的加入
方法(即:Add ( )方法),加入此节点对象。下面就是在
treeView1组件中加入一个子节点的具体代码:

//首先判断是否选定组件中的位置
if ( treeView1.SelectedNode == null )
{
MessageBox.Show ( "请选择一个节点" , "提示信息" , 
MessageBoxButtons.OK , MessageBoxIcon.Information ) ;
}
else
{
//创建一个节点对象,并初始化
TreeNode tmp ;
tmp = new TreeNode ( "节点名称" ) ;
//在TreeView组件中加入子节点
treeView1.SelectedNode.Nodes.Add ( tmp ) ;
treeView1.SelectedNode = tmp ;
treeView1.ExpandAll ( ) ;
}

  (2).加入兄弟节点:

  所谓兄弟节点,就是在选定的节点的平级的节点。加入兄弟节
点的方法和加入子节点的方法基本一致,只是在最后的实现方法上
有着略微的区别。加入兄弟节点的具体步骤,首先也是要确定要加
入的兄弟节点所处的位置,接着定义一个节点对象,最后调用
TreeView类中对兄弟节点加入的方法,加入此节点对象。加入兄弟
节点和加入子节点的最大区别就在于这最后一步。希望读者能够注
意。下面是在TreeView组件加入一个兄弟节点的具体代码:

//首先判断是否选定组件中节点的位置
if ( treeView1.SelectedNode == null )
{
MessageBox.Show ( "请选择一个节点" , "提示信息" , 
MessageBoxButtons.OK , MessageBoxIcon.Information ) ;
}
else
{
//创建一个节点对象,并初始化
TreeNode tmp ;
tmp = new TreeNode ( textBox1.Text ) ;
//在TreeView组件中加入兄弟节点
treeView1.SelectedNode.Parent.Nodes.Add ( tmp ) ;
treeView1.ExpandAll ( ) ;
}

  (3).删除节点:

  删除节点就是删除TreeView组件中选定的节点,删除节点可以
是子节点,也可以是兄弟节点,但无论节点的性质如何,必须保证
要删除的节点没有下一级节点,否则必须先删除此节点中的所有下
一级节点,然后再删除此节点。删除节点比起上面的二个操作要显
得略微简单,具体方法是:首先判断要删除的节点是否存在下一级
节点,如果不存在,就调用TreeView类中的Remove ( )方法,就可
以删除节点了。下面是删除TreeView组件中节点的具体代码:

//判断选定的节点是否存在下一级节点
if ( treeView1.SelectedNode.Nodes.Count == 0 )
//删除节点
treeView1.SelectedNode.Remove ( ) ;
else
MessageBox.Show ( "请先删除此节点中的子节点!" , "提示信
息" , MessageBoxButtons.OK , 
MessageBoxIcon.Information ) ;

  (4).TreeView组件的一些其他常用操作:

  其他的一些常用操作比起上面的三种操作,在具体实现上要显
得简单许多。这些常用操作无非是,展开所有节点,展开指定的节
点、和折叠所有节点。下面就来具体介绍一下:

  < I > .展开所有节点:

  要展开TreeView组件中的所有节点,首先就要把选定的节点指
针定位在TreeView组件的根节点上,然后调用选定组件的ExpandAll
方法就可以了,下面是具体代码:

//定位根节点
treeView1.SelectedNode = treeView1.Nodes [ 0 ] ;
//展开组件中的所有节点
treeView1.SelectedNode.ExpandAll ( ) ;

  < II > .展开选定节点的下一级节点:

  由于只是展开下一级节点,所以就没有必要用ExpandAll ( )方
法了。展开下一级节点只需要调用Expand ( )方法就可以了,下面
是具体的实现代码:

treeView1.SelectedNode.Expand ( ) ;

  < III > .折叠所有节点:

  折叠所有节点和展开所有节点是一组互操作,具体实现的思路
也大致相同,折叠所有节点也是首先要把选定的节点指针定位在根
节点上,然后调用选定组件的Collapse ( )就可以了,下面是具体
的实现代码:

//定位根节点
treeView1.SelectedNode = treeView1.Nodes [ 0 ] ;
//折叠组件中所有节点
treeView1.SelectedNode.Collapse ( ) ;

  至此已经把在C#操作TreeView组件的常用方法和一般方法基本都介绍完了

三. C#编写的一个完整操作TreeView组件的例子:

  下面是C#编写一个的关于TreeView组件的例子,在这个例子
中,结合以上介绍的常用方法和一般方法,基本覆盖来TreeView组
件的一些最常用的操作。譬如可以灵活的程序中的TreeView组件
中,进行加入子节点、兄弟节点、删除节点、折叠、展开等操作。
其中前三种基本操作是通过程序中弹出菜单中的功能来实现的,后
面操作是通过程序中的按钮来实现的。下面是此程序的代码节略
(TreeView.cs):

using System ;
using System.Drawing ;
using System.Collections ;
using System.ComponentModel ;
using System.Windows .Forms ;
using System.Data ;
namespace 全面掌握TreeView组件的使用方法
{
/// Form1 的摘要说明。
public class Form1 : Form
{
private TreeView treeView1 ;
private Button button1 ;
private Button button2 ;
private Button button3 ;
private MenuItem menuItem2 ;
private MenuItem menuItem3 ;
private MenuItem menuItem4 ;
private ContextMenu contextMenu1 ;
private TextBox textBox1 ;
private Label label1 ;
/// 必需的设计器变量。
private System.ComponentModel.Container components = null ;
public Form1 ( )
{
//初始化窗体中的组件
InitializeComponent ( ) ;
}
/// 清理所有正在使用的资源。
protected override void Dispose ( bool disposing )
{
if ( disposing )
{
if ( components != null )
{
components.Dispose ( ) ;
}
}
base.Dispose ( disposing ) ;
}
private void InitializeComponent ( )
{
  //初始化代码(略)
}
[ STAThread ]
static void Main ( )
{
Application.Run ( new Form1 ( ) ) ;
}
private void AddChildNode ( )
{
//首先判断是否选定组件中的位置
if ( treeView1.SelectedNode == null )
{
MessageBox.Show ( "请选择一个节点" , "提示信息" , 
MessageBoxButtons.OK , MessageBoxIcon.Information ) ;
}
else
{
if ( textBox1.Text != "" )
{
//创建一个节点对象,并初始化
TreeNode tmp ;
tmp = new TreeNode ( textBox1.Text ) ;
//在TreeView组件中加入子节点
treeView1.SelectedNode.Nodes.Add ( tmp ) ;
treeView1.SelectedNode = tmp ;
treeView1.ExpandAll ( ) ;
}
else
{
MessageBox.Show ( "TextBox组件必须填入节点名称!" , "提示信
息" , MessageBoxButtons.OK , MessageBoxIcon.Information ) ;
return ;
}
}
}
private void AddParent ( )
{
//首先判断是否选定组件中节点的位置
if ( treeView1.SelectedNode == null )
{
MessageBox.Show ( "请选择一个节点" , "提示信息" , 
MessageBoxButtons.OK , MessageBoxIcon.Information ) ;
}
else
{
if ( textBox1.Text != "" )
{
//创建一个节点对象,并初始化
TreeNode tmp ;
tmp = new TreeNode ( textBox1.Text ) ;
//在TreeView组件中加入兄弟节点
treeView1.SelectedNode.Parent.Nodes.Add ( tmp ) ;
treeView1.ExpandAll ( ) ;
}
else
{
MessageBox.Show ( "TextBox组件必须填入节点名称!" , "提示信
息" , MessageBoxButtons.OK , MessageBoxIcon.Information ) ;
return ;
}
}
TreeNode tnode = new TreeNode ( textBox1.Text ) ;
}
private void treeView1_MouseDown ( object sender , 
MouseEventArgs e )
{
if ( e.Button == MouseButtons.Right )
contextMenu1.Show ( this , new Point ( e.X , e.Y ) ) ;
}
private void button1_Click ( object sender , 
System.EventArgs e )
{
treeView1.SelectedNode.Expand ( ) ;
}
private void menuItem2_Click ( object sender , 
System.EventArgs e )
{
AddChildNode ( ) ;
}
private void menuItem3_Click ( object sender , 
System.EventArgs e )
{
AddParent ( ) ;
}
private void menuItem4_Click ( object sender , 
System.EventArgs e )
{
//判断选定的节点是否存在下一级节点
if ( treeView1.SelectedNode.Nodes.Count == 0 )
//删除节点
treeView1.SelectedNode.Remove ( ) ;
else
MessageBox.Show ( "请先删除此节点中的子节点!" , "提示信
息" , MessageBoxButtons.OK , MessageBoxIcon.Information ) ;
}
private void button2_Click ( object sender , 
System.EventArgs e )
{
//定位根节点
treeView1.SelectedNode = treeView1.Nodes [ 0 ] ;
//展开组件中的所有节点
treeView1.SelectedNode.ExpandAll ( ) ;
}
private void button3_Click ( object sender , 
System.EventArgs e )
{
//定位根节点
treeView1.SelectedNode = treeView1.Nodes [ 0 ] ;
//折叠组件中所有节点
treeView1.SelectedNode.Collapse ( ) ;
}
}
}

C# Winform TreeView 的一些基本用法的更多相关文章

  1. winform treeView 数据绑定

    转载:http://www.jetwu.cn/archives/737 winform treeView 数据绑定 private void Form1_Load(object sender, Eve ...

  2. 关于WinForm TreeView的分享~

    最近在写个测试demo的时候使用到WinForm TreeView,已经好久没接触了,有些生疏,所以还是记录一下遇到的一些问题. 1.如果动态绑定TreeView,这个功能一般会在数据量不确定,需要去 ...

  3. winform TreeView的一些用法以及异步加载

    今天,主要弄了一下对于树型控件的一些方法,以及异步加载.参考: http://www.cnblogs.com/greatverve/archive/2012/03/23/winform-treevie ...

  4. winform Treeview控件使用

    做角色菜单权限时用到treeview控件做树状显示菜单,简单总结了一下用法: 1.在winform窗体中拖入treeview控件,注意修改属性CheckBoxes属性为true,即在节点旁显示复选框 ...

  5. Winform TreeView 查找下一个节点

    转载:http://www.cnblogs.com/Ruiky/archive/2013/02/01/2888674.html public static class TreeViewHelper { ...

  6. WPF之Treeview控件简单用法

    TreeView:表示显示在树结构中分层数据具有项目可展开和折叠的控件 TreeView 的内容是可以包含丰富内容的 TreeViewItem 控件,如 Button 和 Image 控件.TreeV ...

  7. treeview和listview的用法

    今天无聊中弄了个小东西,熟悉一下对listview和treeview的用法.代码如下:  public partial class Form1 : Form     {         private ...

  8. C# winform TreeView中关于checkbox选择的完美类

    public static class TreeViewCheck { /// <summary> /// 系列节点 Checked 属性控制 /// </summary> / ...

  9. c# winform TreeView NODE(节点) 重命名或获取节点修改后的值

    在程序开发过程中我们经常用到treeview,还经常要修改节点的名字.节点名字修改后还想及时更新数据库.这时问题就来了,怎样获取NODE(节点)更新后的值呢?本人试了很多方法最终分析出treeview ...

随机推荐

  1. 计数器(counter),有序字典(OrderDict),默认字典(defaultdict),可命名元祖(namedtuple),双向队列(deque),单项队列(deuqe.Queue)

    Python_Day_05 计数器(counter),有序字典(OrderDict),默认字典(defaultdict),可命名元祖(namedtuple),双向队列(deque),单项队列(deuq ...

  2. MySQL查询优化之explain的深入解析

    在分析查询性能时,考虑EXPLAIN关键字同样很管用.EXPLAIN关键字一般放在SELECT查询语句的前面,用于描述MySQL如何执行查询操作.以及MySQL成功返回结果集需要执行的行数.expla ...

  3. C语言基础(1)-基本语法及注意事项

    1. include 头文件包含 #include <stdio.h>这个是hello world程序的第一句话 # 代表预编译指令 #include的意思就是头文件包含,使用C语言库函数 ...

  4. 每秒执行一个shell脚本(转载)

      上周迁移了一台服务器,发现其中一个项目的数据没有更新,查询原服务器的数据,数据有更新,并找到了rsync服务,从其他服务器传输数据,那么如何找到这台服务器?因为是从远程传输到本地,而且不是很频繁, ...

  5. [Scala] 快学Scala A3L3

    Actor 通过尽可能避免锁和共享状态,actor使得我们能够容易地设计出正确.没有死锁或争用状况的程序. Scala类库提供了一个actor模型的简单实现.AKKA是更高级的actor类库. 19. ...

  6. DbHelper为什么要用Using?

    我们分析一下DbHelper做什么事情,大家都知道它用于数据库的连接操作,这里的数据库连接会创建非托管资源,c#的垃圾回收机制不会对它处理,需要实现IDisposable接口手动释放.   手动释放的 ...

  7. KEGG数据库的使用方法与介绍

    KEGG数据库的使用方法与介绍 KEGG的数据 KEGG中的pathway是根据相关知识手绘的,这里的手绘的意思可能是指人工以特定的语言格式来确定通路各组件的联系:基因组信息主要是从NCBI等数据库中 ...

  8. Spring中集合类型属性注入

    我们都知道如何去注入普通属性的值,非常简单,那么我们如何去注入开发中常见的集合类型的属性了,别急,往下看. 这里将介绍如何给Map list set Array Properties 这些属性注入值. ...

  9. H5案例分享:html5移动开发细微之美

    html5移动开发细微之美 1.H5页面窗口自动调整到设备宽度,并禁止用户缩放页面 <meta name="viewport" content="width=dev ...

  10. 【原创】Redux 卍解

    Redux 卍解 Redux - Flux设计模式的又一种实现形式. 说起Flux,笔者之前,曾写过一篇<ReFlux细说>的文章,重点对比讲述了Flux的另外两种实现形式:『Facebo ...