c#中treeview的用法

来源:互联网 发布:cad2017for mac汉化包 编辑:程序博客网 时间:2024/05/06 04:17

TreeView组件是由多个类来定义的,TreeView组件是由命名空间"System.Windows.forms"中的"TreeView"类来定义的,而其中的节点(即Node),是由命名空间"System.Windows.forms"中的"TreeNode"来定义的。所以当在程序中创建一个TreeView对象,其实只是创建了一个可以放置节点的"容器"。而在这个容器中加入一个节点,其实就是加入了从"TreeNode"类中创建的一个节点对象;同样删除一个节点,也就是删除一个"TreeNode"节点对象。 59d
©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  UI
  一. 本文中介绍的程序设计及运行环境 Y
©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  V
    (1).微软视窗2000 服务器版 !cO
©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  0Tu<o
    (2)..Net Framework SDK 正式版 i4
©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  v
  二. C#操作TreeView组件中的一些常用方法以及具体实现: _.
©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  IE
  TreeView组件虽然是一个操作起来比较麻烦的组件,但归根到底,可以总结为三种基本操作:加入子节点、加入兄弟节点和删除节点。掌握了这三种常用操作,对于在编程中灵活运用TreeView组件是十分必要的。下面就分别来加以介绍。 !
©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  .[jX
   (1).加入子节点: /I
©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  ?MOV
  所谓子节点,就是处于选定节点的下一级节点。加入子节点的具体过程是:首先要在TreeView组件中定位要加入的子节点的位置,然后创建一个节点对象,然后利用TreeVeiw类中对节点的加入方法(即:Add ( )方法),加入此节点对象。下面就是在treeView1组件中加入一个子节点的具体代码: 1[#k
©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  )1/%,9
//首先判断是否选定组件中的位置 gnb
if ( treeView1.SelectedNode == null ) _a
{ ©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  *
MessageBox.Show ( "请选择一个节点" , "提示信息" , MessageBoxButtons.OK , MessageBoxIcon.Information ) ; UV*
} ©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  jjkR
else ©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  i>}L
{ ©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  j55/)X
//创建一个节点对象,并初始化 /9=
TreeNode tmp ; p1f@M
tmp = new TreeNode ( "节点名称" ) ; yGt+(
//在TreeView组件中加入子节点 &
treeView1.SelectedNode.Nodes.Add ( tmp ) ; h-g
treeView1.SelectedNode = tmp ; [eK;B
treeView1.ExpandAll ( ) ; !0/p
}  lb*M
©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  90
   (2).加入兄弟节点: t
©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  8VvXKI
  所谓兄弟节点,就是在选定的节点的平级的节点。加入兄弟节点的方法和加入子节点的方法基本一致,只是在最后的实现方法上有着略微的区别。加入兄弟节点的具体步骤,首先也是要确定要加入的兄弟节点所处的位置,接着定义一个节点对象,最后调用TreeView类中对兄弟节点加入的方法,加入此节点对象。加入兄弟节点和加入子节点的最大区别就在于这最后一步。希望读者能够注意。下面是在TreeView组件加入一个兄弟节点的具体代码: El/
©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  wwvzS}
//首先判断是否选定组件中节点的位置 zL4d`
if ( treeView1.SelectedNode == null ) O
{ ©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  R$Ca<Z
MessageBox.Show ( "请选择一个节点" , "提示信息" , MessageBoxButtons.OK , MessageBoxIcon.Information ) ; kdK<`R
} ©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  m|56?
else ©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  b?
{ ©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  =m5
//创建一个节点对象,并初始化 b1@<|!
TreeNode tmp ; KEfx
tmp = new TreeNode ( textBox1.Text ) ; De`:)
//在TreeView组件中加入兄弟节点 ~1u
treeView1.SelectedNode.Parent.Nodes.Add ( tmp ) ; Q4'F3
treeView1.ExpandAll ( ) ; ^
}  D11
©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  4zi
   (3).删除节点: U:Y
©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  q_B
  删除节点就是删除TreeView组件中选定的节点,删除节点可以是子节点,也可以是兄弟节点,但无论节点的性质如何,必须保证要删除的节点没有下一级节点,否则必须先删除此节点中的所有下一级节点,然后再删除此节点。删除节点比起上面的二个操作要显得略微简单,具体方法是:首先判断要删除的节点是否存在下一级节点,如果不存在,就调用TreeView类中的Remove ( )方法,就可以删除节点了。下面是删除TreeView组件中节点的具体代码: cwE%4
©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  A
//判断选定的节点是否存在下一级节点 / XI
if ( treeView1.SelectedNode.Nodes.Count == 0 ) Sd,z^
//删除节点 EC-<
treeView1.SelectedNode.Remove ( ) ; "RL
else ©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  ;"g
MessageBox.Show ( "请先删除此节点中的子节点!" , "提示信息" , MessageBoxButtons.OK , MessageBoxIcon.Information ) ;  )/tu
©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  ?8b
   (4).TreeView组件的一些其他常用操作: ^PJ^]
©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  sk]FF
  其他的一些常用操作比起上面的三种操作,在具体实现上要显得简单许多。这些常用操作无非是,展开所有节点,展开指定的节点、和折叠所有节点。下面就来具体介绍一下: W($/O"
©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  ,@hfgl
   < I > .展开所有节点: p)0E+
©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  R_
  要展开TreeView组件中的所有节点,首先就要把选定的节点指针定位在TreeView组件的根节点上,然后调用选定组件的ExpandAll方法就可以了,下面是具体代码: @
©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  &+nP
//定位根节点 M8e}4
treeView1.SelectedNode = treeView1.Nodes [ 0 ] ; ^/|:/
//展开组件中的所有节点 >-*J>
treeView1.SelectedNode.ExpandAll ( ) ; T
©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  P?:D}
   < II > .展开选定节点的下一级节点: aw3F
©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  z([w3
  由于只是展开下一级节点,所以就没有必要用ExpandAll ( )方法了。展开下一级节点只需要调用Expand ( )方法就可以了,下面是具体的实现代码: -T
©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  x-
treeView1.SelectedNode.Expand ( ) ; a0
©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  yWree*
   < III > .折叠所有节点: 0@_
©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  >MUW
  折叠所有节点和展开所有节点是一组互操作,具体实现的思路也大致相同,折叠所有节点也是首先要把选定的节点指针定位在根节点上,然后调用选定组件的Collapse ( )就可以了,下面是具体的实现代码: &x08
©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  ~a#Nf
//定位根节点 v4h
treeView1.SelectedNode = treeView1.Nodes [ 0 ] ; 1
//折叠组件中所有节点 ?Ho
treeView1.SelectedNode.Collapse ( ) ;  ?
©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  L0.
  至此已经把在C#操作TreeView组件的常用方法和一般方法基本都介绍完了。|&j
©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  g
  三. C#编写的一个完整操作TreeView组件的例子: -
©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  =Q
   下面是C#编写一个的关于TreeView组件的例子,在这个例子中,结合以上介绍的常用方法和一般方法,基本覆盖来TreeView组件的一些最常用的操作。譬如可以灵活的程序中的TreeView组件中,进行加入子节点、兄弟节点、删除节点、折叠、展开等操作。其中前三种基本操作是通过程序中弹出菜单中的功能来实现的,后面操作是通过程序中的按钮来实现的。下面是此程序的代码节略(TreeView.cs): `OUww_
©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  j8
using System ; w>775H
using System.Drawing ; g{
using System.Collections ; t~
using System.ComponentModel ; BG;
using System.Windows.forms ; @RZW-
using System.Data ; -~!NQf
namespace 全面掌握TreeView组件的使用方法 #6
{ ©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  @<3}1_
/// form1 的摘要说明。 !6bPLb
public class form1 : form D
{ ©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  P~$IN
private TreeView treeView1 ; X/F
private Button button1 ; i
private Button button2 ; T~$F
private Button button3 ; q
private MenuItem menuItem2 ; f
private MenuItem menuItem3 ; 8N[I
private MenuItem menuItem4 ; ?Xjws}
private ContextMenu contextMenu1 ; ZrE.
private TextBox textBox1 ; Q([/j
private Label label1 ; Ta
/// 必需的设计器变量。 dTJ36
private System.ComponentModel.Container components = null ; rD
public form1 ( ) l8W
{ ©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  dK@
//初始化窗体中的组件 j`
InitializeComponent ( ) ; /vf9?
} ©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  Wu
/// 清理所有正在使用的资源。 *l(G7
protected override void Dispose ( bool disposing ) hc/`
{ ©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  9YY
if ( disposing ) tCwx
{ ©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  H$Q
if ( components != null ) |LqP9
{ ©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  y/WP
components.Dispose ( ) ; u05g"
} ©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  Do%$pw
} ©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  ]<
base.Dispose ( disposing ) ; n_T%O
} ©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  ;9
private void InitializeComponent ( ) O5p
{ ©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  F(R>
   //初始化代码(略) d
} ©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  3
[ STAThread ] ~M
static void Main ( ) f
{ ©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  u1
Application.Run ( new form1 ( ) ) ; Xt/{=Y
} ©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  ("
private void AddChildNode ( ) 0e(v
{ ©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  ~jk_vR
//首先判断是否选定组件中的位置 x(
if ( treeView1.SelectedNode == null ) >-Ot2v
{ ©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  9"fk@9
MessageBox.Show ( "请选择一个节点" , "提示信息" , MessageBoxButtons.OK , MessageBoxIcon.Information ) ; }&0(#
} ©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  )
else ©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  Y!<
{ ©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  eV.Z#,
if ( textBox1.Text != "" ) z
{ ©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  s%
//创建一个节点对象,并初始化 J^K
TreeNode tmp ; |Y`+U
tmp = new TreeNode ( textBox1.Text ) ; 48
//在TreeView组件中加入子节点 (eS]
treeView1.SelectedNode.Nodes.Add ( tmp ) ; fa(
treeView1.SelectedNode = tmp ; <qb
treeView1.ExpandAll ( ) ; Wn
} ©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  asHAw
else ©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  jU
{ ©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  iuh 3
MessageBox.Show ( "TextBox组件必须填入节点名称!" , "提示信息" , MessageBoxButtons.OK , MessageBoxIcon.Information ) ; @
return ; I8
} ©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  ?JF8'
} ©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  1<
} ©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  <03XQo
private void AddParent ( ) #:F)
{ ©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  ry
//首先判断是否选定组件中节点的位置 +-D
if ( treeView1.SelectedNode == null ) WYvI
{ ©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  =[rx
MessageBox.Show ( "请选择一个节点" , "提示信息" , MessageBoxButtons.OK , MessageBoxIcon.Information ) ; o*1m&0
} ©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  V[
else ©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  >tP
{ ©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  s
if ( textBox1.Text != "" ) E
{ ©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  7;[Z&
//创建一个节点对象,并初始化 b|D
TreeNode tmp ; +
tmp = new TreeNode ( textBox1.Text ) ; 7cdr
//在TreeView组件中加入兄弟节点 V@D
treeView1.SelectedNode.Parent.Nodes.Add ( tmp ) ; *m(E84
treeView1.ExpandAll ( ) ; 37$NM*
} ©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  p
else ©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  Vd8i
{ ©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  <
MessageBox.Show ( "TextBox组件必须填入节点名称!" , "提示信息" , MessageBoxButtons.OK , MessageBoxIcon.Information ) ; vxf#o[
return ; 3ZsuS*
} ©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  b^<MaA
} ©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  %m#~V^
TreeNode tnode = new TreeNode ( textBox1.Text ) ; .]"
} ©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  e]7c
private void treeView1_MouseDown ( object sender , MouseEventArgs e ) I!V$-
{ ©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  /UJ
if ( e.Button == MouseButtons.Right ) tzA4i
contextMenu1.Show ( this , new Point ( e.X , e.Y ) ) ; YjFl
} ©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  po
private void button1_Click ( object sender , System.EventArgs e ) y1%q
{ ©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  IX%@O&
treeView1.SelectedNode.Expand ( ) ; L&Uo
} ©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  /
private void menuItem2_Click ( object sender , System.EventArgs e ) /L#)
{ ©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  0<a
AddChildNode ( ) ; ]7*[zD
} ©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  z>
private void menuItem3_Click ( object sender , System.EventArgs e ) [6}
{ ©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  m=
AddParent ( ) ; Cf
} ©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  @cMXZ;
private void menuItem4_Click ( object sender , System.EventArgs e ) V4Syq
{ ©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  sZe G
//判断选定的节点是否存在下一级节点 /2"d
if ( treeView1.SelectedNode.Nodes.Count == 0 ) 7
//删除节点 J
treeView1.SelectedNode.Remove ( ) ; N@
else ©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  M=<'
MessageBox.Show ( "请先删除此节点中的子节点!" , "提示信息" , MessageBoxButtons.OK , MessageBoxIcon.Information ) ; 33T9
} ©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  1s
private void button2_Click ( object sender , System.EventArgs e ) r"5^
{ ©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  x*YH
//定位根节点 -%=O
treeView1.SelectedNode = treeView1.Nodes [ 0 ] ; iJo~,3
//展开组件中的所有节点 !|K
treeView1.SelectedNode.ExpandAll ( ) ; S(g
} ©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  %v
private void button3_Click ( object sender , System.EventArgs e ) {&K(
{ ©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  M'p@!
//定位根节点 2=!
treeView1.SelectedNode = treeView1.Nodes [ 0 ] ; M>
//折叠组件中所有节点 IPXn
treeView1.SelectedNode.Collapse ( ) ; f75<i
} ©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  ]rXL
} ©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  mWQTrq
}  KF
©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  id
四. 总结: Yi
©64位时代(64bits.cn) -- 四六级|雅思资料下载|linux技术文档资料|网络知识  5_p(T
  TreeView组件是一个既令程序员头痛,又令程序员难以割舍的组件。这是因为TreeView组件使用非常灵活,显示内容有层次,并且"容量"相对又比较大。但同时在实际的编程比起其他组件又相对麻烦。掌握了本文介绍的这些用C#操作TreeView组件的基本方法后,我想对于在使用TreeView组件中的一般的问题,应该都能够克服了吧。8RSY

原创粉丝点击