複製鏈接
請複製以下鏈接發送給好友

TreeView控件

鎖定
TreeView控件用來顯示信息的分級視圖,如同Windows裏的資源管理器的目錄。TreeView控件中的各項信息都有一個與之相關的Node對象。TreeView顯示Node對象的分層目錄結構,每個Node對象均由一個Label對象和其相關的位圖組成。在建立TreeView控件後,可以展開和摺疊、顯示或隱藏其中的節點。TreeView控件一般用來顯示文件和目錄結構、文檔中的類層次、索引中的層次和其他具有分層目錄結構的信息。
中文名
TreeView控件
釋    義
控件用來顯示信息的分級視圖

TreeView控件基本介紹

TreeView 控件顯示 Node 對象的分層列表,每個 Node 對象均由一個標籤和一個可選的位圖組成。TreeView 一般用於顯示文檔標題、索引入口、磁盤上的文件和目錄、或能被有效地分層顯示的其它種類信息。創建了 TreeView 控件之後,可以通過設置屬性與調用方法對各 Node 對象進行操作,這些操作包括添加、刪除、對齊和其它操作。可以編程展開與折回 Node 對象來顯示或隱藏所有子節點。Collapse、Expand 和 NodeClick 三個事件也提供編程功能。Node 對象使用 Root、Parent、Child、FirstSibling、Next、Previous 和 LastSibling 屬性。在代碼中可通過檢索對 Node 對象的引用,從而在樹上定位。也可以使用鍵盤定位。UP ARROW 鍵和 DOWN ARROW 鍵向下循環穿過所有展開的 Node 對象。從左到右、從上到下地選擇 Node 對象。若在樹的底部,選擇便跳回樹的頂部,必要時滾動窗口。RIGHT ARROW 鍵和 LEFT ARROW 鍵也穿過所有展開的 Node 對象,但是如果選擇了未展開的 Node之後再按 RIGHT ARROW 鍵,該 Node 便展開;第二次按該鍵,選擇將移向下一個 Node。相反,若擴展的 Node 有焦點,這時再按 LEFT ARROW 鍵,該 Node 便折回。如果按下 ANSI 字符集 中的鍵,焦點將跳轉至以那個字母開頭的最近的 Node。後續的按該鍵的動作將使選擇向下循環,穿過以那個字母開頭的所有展開節點。
控件的外觀有八種可用的替換樣式,它們是文本、位圖、直線和 +/- 號的組合,Node 對象可以任一種組合出現。
TreeView 控件使用由 ImageList 屬性指定的 ImageList 控件,來存儲顯示於 Node 對象的位圖和圖標。任何時刻,TreeView 控件只能使用一個 ImageList。這意味着,當 TreeView 控件的 Style 屬性被設置成顯示圖象的樣式時,TreeView 控件中每一項的旁邊都有一個同樣大小的圖象。
發佈注意 TreeView 控件是 COMCTL32.OCX 文件中的一組 ActiveX 控件的一部分。為了在應用程序中使用 TreeView 控件,必須將 COMCTL32.OCX 文件添加到工程中。在發佈應用程序時,要在用户的 Microsoft Windows System 或 System32 目錄中安裝 COMCTL32.OCX 文件。

TreeView控件屬性

DropHighlight屬性(ListView, TreeView控件),
Indentation屬性,
LabelEdit屬性,
LineStyle屬性,
Nodes屬性,
PathSeparator屬性(TreeView控件),
SelectedItem屬性(ActiveX控件),
Sorted屬性(TreeView控件),
Style屬性(TreeView控件),
Checkboxes屬性,
FullRowSelect屬性,
Scroll屬性,
SingleSel屬性,
HotTracking屬性,
TabIndex屬性,
Tag屬性,
Visible屬性,
DragIcon屬性,
DragMode屬性,
CausesValidation屬性,
MouseIcon屬性,
TabStop屬性,
HelpContextID屬性,
Name屬性,
Parent屬性,
Container屬性,
ToolTipText屬性,
WhatsThisHelpID屬性,
OLEDragMode屬性(ActiveX控件),
OLEDropMode屬性(ActiveX控件),
Height , Width屬性(ActiveX控件),
Index屬性(ActiveX控件),
Left, Top屬性(ActiveX控件),
Object屬性(ActiveX控件),
Appearance屬性(ActiveX控件),
BorderStyle屬性(ActiveX控件),
Enable屬性(ActiveX控件),
Font屬性(ActiveX控件),
HideSelection屬性(ActiveX控件),
hWnd屬性(ActiveX控件),
MousePointer屬性(ActiveX控件),
ImageList屬性(ActiveX控件)。

TreeView控件方法

GetVisibleCount方法,
HitTest方法(ListView, TreeView控件),
StartLabelEdit方法,
SetFocus方法,
Drag方法,
Move方法,
ZOrder方法,
ShowWhatsThis方法,
OLEDrag方法(ActiveX控件),
Refresh方法(ActiveX控件)。
-----------------------------------------------------------------------------------------------------------

TreeView控件常用屬性

1、Nodes屬性返回對TreeView控件的Node對象的集合的引用。
語法:object.Nodes
object所在處代表一個對象表達式,其值是“應用於”列表中的一個對象。
説明:可以使用標準的集合方法(例如:Add和Remove方法)操作Node對象。可以按其索引或存儲在Key屬性中的唯一鍵來訪問集合中的每個元素。
2、Style屬性返回或設置圖形類型(圖象、文本、+/-號、直線)以及出現在 TreeView 控件中每一Node對象上的文本的類型。
語法:object.Style [ = number]
Style 語法包含下面部分:
常用屬性
部分
描述
object
對象表達式,其值是“應用於”列表中的一個對象。
number
指定圖形類型的整數,請參閲“設置值”中的描述。
設置值
number 的設置值是:
常用屬性
設置值
描述
0
僅為文本。
1
圖象和文本。
2
+/- 號和文本。
3
+/- 號,圖象和文本。
4
直線和文本。
5
直線,圖象和文本。
6
直線,+/- 號和文本。
7
(缺省)直線,+/- 號,圖象和文本。
説明:若Style屬性設置為包含直線的值,則LineStyle屬性就確定了直線的外觀。如果Style屬性設置為不含直線的值,則LineStyle屬性將被忽略。
3、Sorted屬性返回或設置一值,此值確定Node對象的子節點是否按字母順序排列;返回或設置一值,此值確定TreeView控件的根層節點是否按字母順序排列。
語法:object.Sorted [ = boolean]
Sorted屬性語法包含下面部分:
Sorted屬性語法
部分
描述
object
對象表達式,其值是“應用於”列表中的一個對象。
boolean
布爾表達式,表示 Node 對象是否已被排序如“設置值”中描述。
boolean的設置值是:
boolean的設置值
設置值
描述
True
Node 對象根據它們的 Text 屬性按字母順序排列。其 Text 屬性由數字開始的 Node 對象也作為字符串排序,第一個數字確定在排序中的初始位置,後面的數字確定以後的排序。
False
Node 對象不排序。
説明:Sorted屬性有兩種用法,第一,在TreeView控件的根(頂)層排列Node對象,第二,對任何單個Node對象的立即子節點排序。
例如,下面的代碼是對TreeView控件的根節點排序:
TreeView1.Sorted = True 頂層Node對象被排序。
下面的例子表示創建Node對象時如何設置Sorted屬性:
Dim nodX As Node
Set nodX = TreeView1.Nodes.Add(,,,"Parent Node")
nodX.Sorted = True
設置 Sorted 屬性為True僅對當前Nodes集合排序。在TreeView控件中添加新的Node對象時,必須再次設置 Sorted 屬性為 True,以便對添加的 Node 對象排列。

TreeView控件常用方法

1、Add 方法在Treeview控件的Nodes集合中添加一個Node對象。
語法:
object.Add(relative, relationship, key, text, image, selectedimage)
Add 方法的語法包含下面部分:
Add 方法
部分
描述
object
必需的。對象表達式,其值是“應用於”列表中的一個對象
relative
可選的。
relationship
可選的。指定的 Node 對象的相對位置,如設置值中所述。
key
可選的。唯一的字符串,可用於用 Item 方法檢索 Node。特別注意:key值不能使純數字字符串,文本中必須含有至少一個非數字字符的key值才有效。
text
必需的。在 Node 中出現的字符串。
image
可選的。在關聯的 ImageList 控件中的圖象的索引。
selectedimage
可選的。在關聯的 ImageList 控件中的圖象的索引,在 Node 被選中時顯示。
設置值
relationship 的設置值是:
relationship 的設置值
常數
描述
tvwFirst
0
首的節點。
tvwLast
1
最後的節點。
tvwNext
2
(缺省)下一個節點。該 Node 位於在 relative 中被命名的節點之後。
tvwPrevious
3
前一個節點。該 Node 位於在 relative 中被命名的節點之前。
tvwChild
4
(缺省)子節點。該 Node 成為在 relative 中被命名的節點的子節點。
注意:如果在relative中沒有被命名的Node對象,則新節點被放在節點頂層的最後位置。
説明:Nodes 集合是一個基於 1 的集合。在添加Node對象時,它被指派一個索引號,該索引號被存儲在Node對象的Index屬性中。這個最新成員的Index屬性值就是Node集合的Count屬性的值。因為Add方法返回對新建立的Node對象的引用,所以使用這個引用來設置新Node的屬性十分方便。
2、GetVisibleCount方法返回固定在 TreeView 控件的內部區域的 Node 對象的個數。
語法:object.GetVisibleCount
object 所在處代表一個對象表達式,其值是“應用於”列表中的一個對象。
説明: Node 對象的個數取決於在一個窗口中能固定多少行。總的行數取決於控件的高度和 Font 對象的 Size 屬性。該計數包括列表底部的只能看到一局部的項。可以使用 GetVisibleCount 屬性確保可視的最小行數,這樣可以精確地訪問一個層。如果最小行數是不可視的,可以用Height屬性重新設置TreeView的大小。
3、ExpandAll 方法提供了一種簡便的方法來打開樹中的每個節點。
説明:在節點很多的時候(大於1000),一次展開所有的節點可不是一個好主意,那樣會很慢,影響使用感覺。這時候就使用Nodes.Expand()方法來打開一級子節點。

TreeView控件常用事件

NodeClick 事件在一個 Node 對象被單擊時,這個事件便發生。語法:Private Sub object_NodeClick(ByVal node As object)
NodeClick 事件的語法包含下面部分::
部分 描述
object 對象表達式,其值是“應用於”列表中的一個對象。
node 對被點取的 Node 對象的引用。
説明:
在單擊節點對象之外的 TreeView 控件的任何部位,標準的 Click 事件發生。當單擊某個特定的 Node 對象時,NodeClick 事件發生;NodeClick 事件也返回對特定的 Node 對象的引用,在下一步操作之前,這個引用可用來使這個 Node 對象可用。
NodeClick 事件發生在標準的 Click 事件之前。
語法
object.Add(relative, relationship, key, text, image, selectedimage)
Add 方法的語法包含下面部分:
部分 描述
object 必需的。對象表達式,其值是“應用於”列表中的一個對象
relative 可選的。已存在的 Node 對象的索引號或鍵值。新節點與已存在的節點間的關係,可在下一個參數 relationship 中找到。
relationship 可選的。指定的 Node 對象的相對位置,如設置值中所述。
key 可選的。唯一的字符串,可用於用 Item 方法檢索 Node。
text 必需的。在 Node 中出現的字符串。
image 可選的。在關聯的 ImageList 控件中的圖像的索引。
selectedimage 可選的。在關聯的 ImageList 控件中的圖像的索引,在 Node 被選中時顯示。
設置值
relationship 的設置值是:
常數 值 描述
tvwFirst 0 首的節點。該 Node 和在 relative 中被命名的節點位於同一層,並 位於所有同層節點之前。
tvwLast 1 最後的節點。該 Node 和在 relative 中被命名的節點位於同一層,並 位於所有同層節點之後。任何連續地添加的節點可能位於最後添加的節點之後
tvwNext 2 (缺省)下一個節點。該 Node 位於在 relative 中被命名的節點之後。
tvwPrevious 3 前一個節點。該 Node 位於在 relative 中被命名的節點之前。
tvwChild 4 (缺省)子節點。該 Node 成為在 relative 中被命名的
節點的子節點。
注意 如果在 relative 中沒有被命名的 Node 對象,則新節點被放在節點頂層的最後位置。
説明
Nodes 集合是一個基於 1 的集合。
在添加 Node 對象時,它被指派一個索引號,該索引號被存儲在 Node 對象的 Index 屬性中。這個最新成員的 Index 屬性值就是 Node 集合的 Count 屬性的值。
因為 Add 方法返回對新建立的 Node 對象的引用,所以使用這個引用來設置新 Node 的屬性十分方便。以下例子添加幾個具有相同屬性的 Node 對象:
Dim nodX As Node '聲明對象變量。
Dim I as Integer '聲明計數器變量。
For I = 1 to 4
Set nodX = TreeView1.Nodes.Add(,,,"Node " & Cstr(i))
'使用引用來設置其它屬性,如 Enabled。
nodX.Enabled = True
'把圖像屬性設置為在關聯的 ImageList 中的圖像 3。
nodX.ExpandedImage = 3
Next I

TreeView控件簡單示例

新建一個VB工程、新窗體插入Treeview控件 雙擊窗體
寫入以下代碼
Private Sub Form_Load()
With Me.TreeView1.Nodes
.Add , 4, "K1", "分類(一)"
.Add "K1", 4, , "小分類1"
.Add "K1", 4, , "小分類2"
.Add "K1", 4, , "小分類3"
.Add "K1", 4, , "小分類4"
.Add , 4, "K2", "分類(二)"
.Add "K2", 4, , "小分類1"
.Add "K2", 4, , "小分類2"
.Add "K2", 4, , "小分類3"
.Add "K2", 4, , "小分類4"
.Add , 4, "K3", "分類(三)"
.Add "K3", 4, , "小分類1"
.Add "K3", 4, , "小分類2"
.Add "K3", 4, , "小分類3"
.Add "K3", 4, , "小分類4"
End With
End Sub
按F5即可看到運行效果
------朱星宇------參與編輯
ASP.NET Wijmo的Treeview控件
ASP.NET Wijmo的Treeview控件 ASP.NET Wijmo的Treeview控件
ASP.NET Wijmo的TreeView控件可以在一個分層的樹形結構中顯示項目。C1TreeView控件支持展開或摺疊動畫,時尚的主題,以及日益流行的拖放功能。特性:數據綁定支持。拖放節點。複選框支持。動畫,模板支持,鍵盤支持,主題,CSS支持。

TreeView控件測試數據

添加TreeView控件,2個按鈕
2個按鈕分別用了兩種方法顯示數據。但是第二種方法明顯優於第一種。
可以仔細的看代碼
'引用microsoft activex data object 2.x library
Dim nddata As Node
Dim cnn As ADODB.Connection
Dim rs1 As New ADODB.Recordset
Dim rs2 As New ADODB.Recordset
Private Sub Command1_Click()
On Error Resume Next
Set nddata = TreeView1.Nodes.Add(, , "db", "班級信息")
nddata.Expanded = True
Dim intcount As Integer
Dim inttable As Integer
Dim intfield As Integer
Dim intfn As Integer
rs1.Open "select nj from test group by nj", cnn, 1, 3
inttable = rs1.RecordCount
Do While inttable <> intcount
Set nddata = TreeView1.Nodes.Add("db", tvwChild, "F" & rs1.Fields("nj"), rs1.Fields("nj"))
rs2.Open "select bh,nj from test where nj='" & rs1.Fields("nj") & "'", cnn, 1, 3
intfield = rs2.RecordCount
If intfield<>0 Then
intfn = 0
Do While intfield<>intfn
Set nddata = TreeView1.Nodes.Add("F" & rs1.Fields("nj"), tvwChild, "S" & rs2.Fields("bh"), rs2.Fields("bh"))
rs2.MoveNext
intfn = intfn + 1
Loop
End If
rs2.Close
rs1.MoveNext
intcount = intcount + 1
Loop
rs1.Close
End Sub