TreeView控制項

TreeView控制項

TreeView控制項用來顯示信息的分級視圖,如同Windows里的資源管理器的目錄。TreeView控制項中的各項信息都有一個與之相關的Node對象。TreeView顯示Node對象的分層目錄結構,每個Node對象均由一個Label對象和其相關的點陣圖組成。在建立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 檔案。

屬性

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控制項)。

方法

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

常用屬性

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屬性語法包含下面部分:
部分
描述
object
對象表達式,其值是“套用於”列表中的一個對象。
boolean
布爾表達式,表示 Node 對象是否已被排序如“設定值”中描述。
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 對象排列。

常用方法

1、Add 方法在Treeview控制項的Nodes集合中添加一個Node對象。
語法:
object.Add(relative, relationship, key, text, image, selectedimage)
Add 方法的語法包含下面部分:
部分
描述
object
必需的。對象表達式,其值是“套用於”列表中的一個對象
relative
可選的。
relationship
可選的。指定的 Node 對象的相對位置,如設定值中所述。
key
可選的。唯一的字元串,可用於用 Item 方法檢索 Node。特別注意:key值不能使純數字字元串,文本中必須含有至少一個非數字字元的key值才有效。
text
必需的。在 Node 中出現的字元串。
image
可選的。在關聯的 ImageList 控制項中的圖象的索引。
selectedimage
可選的。在關聯的 ImageList 控制項中的圖象的索引,在 Node 被選中時顯示。
設定值
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()方法來打開一級子節點。

常用事件

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

簡單示例

新建一個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控制項
TreeView控制項
ASP.NET Wijmo的TreeView控制項可以在一個分層的樹形結構中顯示項目。C1TreeView控制項支持展開或摺疊動畫,時尚的主題,以及日益流行的拖放功能。特性:數據綁定支持。拖放節點。複選框支持。動畫,模板支持,鍵盤支持,主題,CSS支持。

測試數據

添加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

相關詞條

熱門詞條

聯絡我們