轉(zhuǎn)帖|其它|編輯:郝浩|2011-04-12 16:36:04.000|閱讀 541 次
概述:TreeView組件是由多個類來定義的,TreeView組件是由命名空間"System.Windows.Forms"中的"TreeView" 類來定義的,而其中的節(jié)點(diǎn)(即Node),是由命名空間"System.Windows.Forms"中的"TreeNode"來定義的。所以當(dāng)在程序中創(chuàng)建一個TreeView對象,其實只是創(chuàng)建了一個可以放置節(jié)點(diǎn)的"容器"。而在這個容器中加入一個節(jié)點(diǎn),其實就是加入了從"TreeNode"類中創(chuàng)建的一個節(jié)點(diǎn)對象;同樣刪除一個節(jié)點(diǎn),也就是刪除一個"TreeNode"節(jié)點(diǎn)對象。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
TreeView組件是由多個類來定義的,TreeView組件是由命名空間"System.Windows.Forms"中的"TreeView"類來定義的,而其中的節(jié)點(diǎn)(即Node),是由命名空間"System.Windows.Forms"中的"TreeNode"來定義的。所以當(dāng)在程序中創(chuàng)建一個TreeView對象,其實只是創(chuàng)建了一個可以放置節(jié)點(diǎn)的"容器"。而在這個容器中加入一個節(jié)點(diǎn),其實就是加入了從"TreeNode"類中創(chuàng)建的一個節(jié)點(diǎn)對象;同樣刪除一個節(jié)點(diǎn),也就是刪除一個"TreeNode"節(jié)點(diǎn)對象。
一. 本文中介紹的程序設(shè)計及運(yùn)行環(huán)境
(1).微軟視窗2000 服務(wù)器版
(2). .Net Framework SDK 正式版
二. C#操作TreeView組件中的一些常用方法以及具體實現(xiàn):
TreeView組件雖然是一個操作起來比較麻煩的組件,但歸根到底,可以總結(jié)為三種基本操作:加入子節(jié)點(diǎn)、加入兄弟節(jié)點(diǎn)和刪除節(jié)點(diǎn)。掌握了這三種常用操作,對于在編程中靈活運(yùn)用TreeView組件是十分必要的。下面就分別來加以介紹。
(1).加入子節(jié)點(diǎn):
所謂子節(jié)點(diǎn),就是處于選定節(jié)點(diǎn)的下一級節(jié)點(diǎn)。加入子節(jié)點(diǎn)的具體過程是:首先要在TreeView組件中定位要加入的子節(jié)點(diǎn)的位置,然后創(chuàng)建一個節(jié)點(diǎn)對象,然后利用TreeVeiw類中對節(jié)點(diǎn)的加入方法(即:Add ( )方法),加入此節(jié)點(diǎn)對象。下面就是在treeView1組件中加入一個子節(jié)點(diǎn)的具體代碼:
//首先判斷是否選定組件中的位置
if ( treeView1.SelectedNode == null )
{
MessageBox.Show ( "請選擇一個節(jié)點(diǎn)" , "提示信息" , MessageBoxButtons.OK , MessageBoxIcon.Information ) ;
}
else
{
//創(chuàng)建一個節(jié)點(diǎn)對象,并初始化
TreeNode tmp ;
tmp = new TreeNode ( "節(jié)點(diǎn)名稱" ) ;
//在TreeView組件中加入子節(jié)點(diǎn)
treeView1.SelectedNode.Nodes.Add ( tmp ) ;
treeView1.SelectedNode = tmp ;
treeView1.ExpandAll ( ) ;
}
(2).加入兄弟節(jié)點(diǎn):
所謂兄弟節(jié)點(diǎn),就是在選定的節(jié)點(diǎn)的平級的節(jié)點(diǎn)。加入兄弟節(jié)點(diǎn)的方法和加入子節(jié)點(diǎn)的方法基本一致,只是在最后的實現(xiàn)方法上有著略微的區(qū)別。加入兄弟節(jié)點(diǎn)的具體步驟,首先也是要確定要加入的兄弟節(jié)點(diǎn)所處的位置,接著定義一個節(jié)點(diǎn)對象,最后調(diào)用TreeView類中對兄弟節(jié)點(diǎn)加入的方法,加入此節(jié)點(diǎn)對象。加入兄弟節(jié)點(diǎn)和加入子節(jié)點(diǎn)的最大區(qū)別就在于這最后一步。希望讀者能夠注意。下面是在TreeView組件加入一個兄弟節(jié)點(diǎn)的具體代碼:
//首先判斷是否選定組件中節(jié)點(diǎn)的位置
if ( treeView1.SelectedNode == null )
{
MessageBox.Show ( "請選擇一個節(jié)點(diǎn)" , "提示信息" , MessageBoxButtons.OK , MessageBoxIcon.Information ) ;
}
else
{
//創(chuàng)建一個節(jié)點(diǎn)對象,并初始化
TreeNode tmp ;
tmp = new TreeNode ( textBox1.Text ) ;
//在TreeView組件中加入兄弟節(jié)點(diǎn)
treeView1.SelectedNode.Parent.Nodes.Add ( tmp ) ;
treeView1.ExpandAll ( ) ;
}
(3).刪除節(jié)點(diǎn):
刪除節(jié)點(diǎn)就是刪除TreeView組件中選定的節(jié)點(diǎn),刪除節(jié)點(diǎn)可以是子節(jié)點(diǎn),也可以是兄弟節(jié)點(diǎn),但無論節(jié)點(diǎn)的性質(zhì)如何,必須保證要刪除的節(jié)點(diǎn)沒有下一級節(jié)點(diǎn),否則必須先刪除此節(jié)點(diǎn)中的所有下一級節(jié)點(diǎn),然后再刪除此節(jié)點(diǎn)。刪除節(jié)點(diǎn)比起上面的二個操作要顯得略微簡單,具體方法是:首先判斷要刪除的節(jié)點(diǎn)是否存在下一級節(jié)點(diǎn),如果不存在,就調(diào)用TreeView類中的Remove ( )方法,就可以刪除節(jié)點(diǎn)了。下面是刪除TreeView組件中節(jié)點(diǎn)的具體代碼:
//判斷選定的節(jié)點(diǎn)是否存在下一級節(jié)點(diǎn)
if ( treeView1.SelectedNode.Nodes.Count == 0 )
//刪除節(jié)點(diǎn)
treeView1.SelectedNode.Remove ( ) ;
else
MessageBox.Show ( "請先刪除此節(jié)點(diǎn)中的子節(jié)點(diǎn)!" , "提示信息" , MessageBoxButtons.OK , MessageBoxIcon.Information ) ;
(4).TreeView組件的一些其他常用操作:
其他的一些常用操作比起上面的三種操作,在具體實現(xiàn)上要顯得簡單許多。這些常用操作無非是,展開所有節(jié)點(diǎn),展開指定的節(jié)點(diǎn)、和折疊所有節(jié)點(diǎn)。下面就來具體介紹一下:
< I > .展開所有節(jié)點(diǎn):
要展開TreeView組件中的所有節(jié)點(diǎn),首先就要把選定的節(jié)點(diǎn)指針定位在TreeView組件的根節(jié)點(diǎn)上,然后調(diào)用選定組件的ExpandAll方法就可以了,下面是具體代碼:
//定位根節(jié)點(diǎn)
treeView1.SelectedNode = treeView1.Nodes [ 0 ] ;
//展開組件中的所有節(jié)點(diǎn)
treeView1.SelectedNode.ExpandAll ( ) ;
< II > .展開選定節(jié)點(diǎn)的下一級節(jié)點(diǎn):
由于只是展開下一級節(jié)點(diǎn),所以就沒有必要用ExpandAll ( )方法了。展開下一級節(jié)點(diǎn)只需要調(diào)用Expand ( )方法就可以了,下面是具體的實現(xiàn)代碼:
treeView1.SelectedNode.Expand ( ) ;
< III > .折疊所有節(jié)點(diǎn):
折疊所有節(jié)點(diǎn)和展開所有節(jié)點(diǎn)是一組互操作,具體實現(xiàn)的思路也大致相同,折疊所有節(jié)點(diǎn)也是首先要把選定的節(jié)點(diǎn)指針定位在根節(jié)點(diǎn)上,然后調(diào)用選定組件的Collapse ( )就可以了,下面是具體的實現(xiàn)代碼:
//定位根節(jié)點(diǎn)
treeView1.SelectedNode = treeView1.Nodes [ 0 ] ;
//折疊組件中所有節(jié)點(diǎn)
treeView1.SelectedNode.Collapse ( ) ;
至此已經(jīng)把在C#操作TreeView組件的常用方法和一般方法基本都介紹完了。
三. C#編寫的一個完整操作TreeView組件的例子:
下面是C#編寫一個的關(guān)于TreeView組件的例子,在這個例子中,結(jié)合以上介紹的常用方法和一般方法,基本覆蓋來TreeView組件的一些最常用的操作。譬如可以靈活的程序中的TreeView組件中,進(jìn)行加入子節(jié)點(diǎn)、兄弟節(jié)點(diǎn)、刪除節(jié)點(diǎn)、折疊、展開等操作。其中前三種基本操作是通過程序中彈出菜單中的功能來實現(xiàn)的,后面操作是通過程序中的按鈕來實現(xiàn)的。下面是此程序的代碼節(jié)略(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 ;
/// 必需的設(shè)計器變量。
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 ( "請選擇一個節(jié)點(diǎn)" , "提示信息" , MessageBoxButtons.OK , MessageBoxIcon.Information ) ;
}
else
{
if ( textBox1.Text != "" )
{
//創(chuàng)建一個節(jié)點(diǎn)對象,并初始化
TreeNode tmp ;
tmp = new TreeNode ( textBox1.Text ) ;
//在TreeView組件中加入子節(jié)點(diǎn)
treeView1.SelectedNode.Nodes.Add ( tmp ) ;
treeView1.SelectedNode = tmp ;
treeView1.ExpandAll ( ) ;
}
else
{
MessageBox.Show ( "TextBox組件必須填入節(jié)點(diǎn)名稱!" , "提示信息" , MessageBoxButtons.OK , MessageBoxIcon.Information ) ;
return ;
}
}
}
private void AddParent ( )
{
//首先判斷是否選定組件中節(jié)點(diǎn)的位置
if ( treeView1.SelectedNode == null )
{
MessageBox.Show ( "請選擇一個節(jié)點(diǎn)" , "提示信息" , MessageBoxButtons.OK , MessageBoxIcon.Information ) ;
}
else
{
if ( textBox1.Text != "" )
{
//創(chuàng)建一個節(jié)點(diǎn)對象,并初始化
TreeNode tmp ;
tmp = new TreeNode ( textBox1.Text ) ;
//在TreeView組件中加入兄弟節(jié)點(diǎn)
treeView1.SelectedNode.Parent.Nodes.Add ( tmp ) ;
treeView1.ExpandAll ( ) ;
}
else
{
MessageBox.Show ( "TextBox組件必須填入節(jié)點(diǎn)名稱!" , "提示信息" , 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 )
{
//判斷選定的節(jié)點(diǎn)是否存在下一級節(jié)點(diǎn)
if ( treeView1.SelectedNode.Nodes.Count == 0 )
//刪除節(jié)點(diǎn)
treeView1.SelectedNode.Remove ( ) ;
else
MessageBox.Show ( "請先刪除此節(jié)點(diǎn)中的子節(jié)點(diǎn)!" , "提示信息" , MessageBoxButtons.OK , MessageBoxIcon.Information ) ;
}
private void button2_Click ( object sender , System.EventArgs e )
{
//定位根節(jié)點(diǎn)
treeView1.SelectedNode = treeView1.Nodes [ 0 ] ;
//展開組件中的所有節(jié)點(diǎn)
treeView1.SelectedNode.ExpandAll ( ) ;
}
private void button3_Click ( object sender , System.EventArgs e )
{
//定位根節(jié)點(diǎn)
treeView1.SelectedNode = treeView1.Nodes [ 0 ] ;
//折疊組件中所有節(jié)點(diǎn)
treeView1.SelectedNode.Collapse ( ) ;
}
}
}
在成功編譯TreeView.cs后,運(yùn)行的程序界面如下:
圖01:C#編寫的操作TreeView組件的程序運(yùn)行界面
四. 總結(jié):
TreeView組件是一個既令程序員頭痛,又令程序員難以割舍的組件。這是因為TreeView組件使用非常靈活,顯示內(nèi)容有層次,并且 "容量"相對又比較大。但同時在實際的編程比起其他組件又相對麻煩。掌握了本文介紹的這些用C#操作TreeView組件的基本方法后,我想對于在使用TreeView組件中的一般的問題,應(yīng)該都能夠克服了吧。
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自:網(wǎng)絡(luò)轉(zhuǎn)載