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

   (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#操作TreeView组件中的一些常用方法相关推荐

  1. antd中table组件中如何进行换行操作(react中)

    antd中table组件中如何进行换行操作(react中) 说明 效果 数据 代码 说明 react项目,遇到某字段对应的单元格内需要换行. 最初想偷懒,尝试了在数据中加入回车.使用模板字符串.转义字 ...

  2. vue中获取/操作组件中的dom元素

    最近刚做了一个项目,需要用到地图,选择的是腾讯地图,创建地图的时候,需要给地图创建函数中传入地图容器的id或者容器的dom元素,但是在调试过程中,发现怎么都无法获取dom元素,直接通过getEleme ...

  3. javaFX学习之TreeView组件(转载)

    转载:http://www.javafxchina.net/blog/2015/04/doc03_treeview/ javaFX应用程序中如何构建树形结构,如何向树视图中增加项.处理事件.通过实现和 ...

  4. Ant Design of Vue —— setFieldsValue方法 动态操作Switch组件

    在开发中经常使用Form组件管理表单,这次想通过form提供的setFieldsValue()方法动态改变Switch组件状态,却没有生效. 加入valuePropName属性之后,就可以使用动态操作 ...

  5. 这就是为什么我们需要在React的类组件中绑定事件处理程序

    by Saurabh Misra 索拉·米斯拉(Saurabh Misra) 这就是为什么我们需要在React的类组件中绑定事件处理程序 (This is why we need to bind ev ...

  6. java socket中属性详解_前端开发:关于Vue组件中的data属性值是函数而不是对象的详解...

    最近在搞关于前端开发的基础知识归纳,发现了不少经典知识点,那么本篇博文就来分享一个经典的知识点:Vue组件中的data属性值为什么是函数而不是对象.首先来了解一下Vue组件的使用理念:在Vue组件使用 ...

  7. Angular-在服务和组件中使用管道

    本文翻译自:Angular - Use pipes in services and components In AngularJS, I am able to use filters (pipes) ...

  8. 【Android 安全】DEX 加密 ( Application 替换 | 分析 ContentProvider 组件中调用 getApplication() 获取的 Application )

    文章目录 一. ContentProvider 创建过程分析 二. ActivityThread 中的 H 处理 BIND_APPLICATION 消息 三. ActivityThread 中的 ha ...

  9. 【Android 安全】DEX 加密 ( Application 替换 | 分析 BroadcastReceiver 组件中调用 getApplication() 获取的 Application )

    文章目录 一. Service 中的 getApplication() 方法分析 二. ActivityThread 中的 H 处理 RECEIVER 消息 三. ActivityThread 中的 ...

最新文章

  1. ORA-01940无法删除当前已连接用户
  2. IHttpModule.Init方法被执行多次的原因
  3. 微软确认5月2日召开新品发布会 8天后就是Build 2017大会
  4. 电商美工手里没有C4D素材模板,不能体现有多厉害
  5. android httpclient 乱码,【问题解决】HttpClient解析服务器返回的response出现乱码
  6. 实验吧_Guess Next SessionOnce More(代码审计)
  7. freemaker if 多个条件_小函数,大用处!巧用AND函数,避开IF函数嵌套
  8. 【解决】Jupyter Notebook 内核似乎挂掉了,它很快将自动重启。
  9. IP和子网掩码和网关的关系
  10. 什么是智能制造成能力成熟度模型?
  11. 浅读C Primer Plus——C语起源
  12. MAC地址IP地址 端口
  13. 如何修改excel的修改日期?
  14. Linux中如何获得进程的运行时堆栈
  15. 同步电复律英文_同步电复律与非同步电复律有什么区别?
  16. php开发cms漏洞,bagecms漏洞复现
  17. 十四个很准的心理暗示
  18. internal server error是什么意思?
  19. (转载)毕博管理咨询公司全球高级副总裁黄辉演讲实录
  20. 关于与kafka的爱恨交织

热门文章

  1. 毕业论文与设计选题管理系统
  2. Kafka能作为数据库使用吗
  3. RGB888 和 RGB565
  4. spring boot 项目 事务 不能回滚 代理(not eligible for auto-proxying)
  5. 软件测试用例设计之Pairwise算法
  6. 二维数组传参||传值
  7. 如何确定Kmeans中的k值
  8. 118 以太坊 ethereum hardhat :编译 artifacts
  9. Bug:No artifacts configured
  10. 如何优雅的在 Word 中插入代码,PlanetB 的完美替代方案