在中TreeView(樹型結構)控件是顯示節點(Node)對象的級層結構它通常用於顯示一些有等級結構的信息我們最為熟悉的就是Windows資源管理器左邊顯示文件和文件夾的窗口在工具箱中TreeView 控件的圖標如下圖一所示
TreeView控件的每個節點(Node對象)包含了一個標簽和可選的點位圖每個節點又可能包含有若干個的子節點可以通過控制某個節點來展開顯示或者折疊隱藏它所包含的子節點
一TreeView 控件的一些常用屬性
CheckBoxes 屬性指示是否在樹視圖控件中的樹節點旁顯示復選框
FullRowSelect 屬性當 FullRowSelect 為 true 時選擇突出顯示將跨越樹視圖的整個寬度即整個顯示區域的寬度而不僅僅是樹節點標簽的寬度如果 ShowLines 設置為 true則將忽略 FullRowSelect 屬性
HideSelection 屬性指示選定的樹節點是否即使在樹視圖已失去焦點時仍會保持突出顯示
HotTracking 屬性如果 HotTracking 屬性設置為 true那麼當鼠標指針移過每個樹節點標簽時樹節點標簽都將具有超級鏈接的外觀Underline 字體樣式將應用於 Font 而 ForeColor 將設置為藍色從而使標簽顯示為鏈接注意如果 CheckBoxes 屬性設置為 trueHotTracking 屬性將失效
Indent 屬性設置每個子樹節點級別的縮進距離(以像素為單位)
ItemHeight 屬性設置樹視圖控件中每個樹節點的高度
Nodes 屬性獲取分配給樹視圖控件的樹節點集合這個屬性是TreeView 控件最重要的屬性之一我們下文將會對它進行更加的詳細的說明
PathSeparator 屬性樹節點路徑(TreeNodeFullPath 屬性)所使用的分隔符串默認為反斜槓字符 (\)樹節點路徑包括一組由 PathSeparator 分隔符串分隔的樹節點標簽標簽的范圍為根樹節點到所需的樹節點如下代碼我們可以獲得當前選中的節點的路徑
MessageBoxShow(TreeViewSelectedNodeFullPath)
SelectedNode 屬性獲取或設置當前在樹視圖控件中選定的樹節點如果沒有選定任何節點則 SelectedNode 屬性則為Nothing
ShowLines 屬性指示是否在樹視圖控件中的樹節點之間繪制連線
ShowPlusMinus 屬性指示是否在包含子樹節點的樹節點旁顯示加號 (+) 和減號 () 按鈕
ShowRootLines 屬性指示是否在樹視圖根處的樹節點之間繪制連線
如下圖二所示為ShowLines 屬性ShowPlusMinus 屬性ShowRootLines 屬性都設置為True的情形
二為TreeView 控件添加節點
TreeView 控件的 Nodes 屬性包含了它所有的節點下面我們就來了解如何為樹狀控件添加節點
通過樹節點編輯器添加
選中TreeView 控件在它的屬性對話框中找到Nodes 屬性然後單擊它後面的省略號彈出樹節點編輯器如下圖三所示
然後通過編輯器上的添加根來添加根節點通過添加子級來為選中的節點添加子節點通過刪除來刪除選定的節點標簽輸入框確定節點的名稱注意只有設置了TreeView 控件的ImageList 屬性才能選擇設置節點的圖像
通過編程方式添加節點
給TreeView添加結點用到的是NodesAdd方法首先選定要添加子結點的結點才能應用這個方法
TreeView中的結點的組織關系是父結點管理子結點的關系也就是說子結點組成的集合就是父結點的Nodes屬性子結點的Index屬性是根據其在子結點集合中的位置而決定的而不是整棵樹中結點的位置根據這個特點若想找到指定結點須按以下的語法
TreeViewNameNodesItem(Index)Nodes
而添加結點的方法為
TreeViewNameNodesItem(Index)NodesAdd(NodeText)
或
TreeViewNameNodesItem(Index)NodesAdd(objNode)
如下代碼所示為選中的節點添加一個子節點
TreeViewSelectedNodeNodesAdd(www)
編程刪除節點
使用Nodes屬性的Remove 方法刪除單個節點也可以使用Clear 方法清除所有的節點如下代碼所示
刪除選定的節點
TreeViewNodesRemove(TreeViewSelectedNode)
清除TreeView 控件的所有節點
TreeViewNodesClear()
示例演示
我們現在用一個實例來看如何使用Nodes屬性來實現代碼編程添加刪除樹形控件的節點首先為設計如下圖四所示的程序界面其中有四個Button 控件一個TreeView 控件
為添加根節點按鈕添加如下代碼
TreeViewNodesAdd(根節點 & (TreeViewGetNodeCount(False) + ))
注意GetNodeCount方法為獲得本級別的節點數可以通過參數False來指定不包括它的子節點
為添加子節點按鈕添加如下代碼
Dim node As TreeNode = TreeViewSelectedNode
If Not node Is Nothing Then
nodeNodesAdd(子節點 & (nodeGetNodeCount(False) + ))
Else
MessageBoxShow(沒有選中任何節點)
End If
注意TreeNodeGetNodeCount 方法返回的是分配給 Nodes 集合的子樹節點的數目
為刪除單個節點按鈕添加代碼
Dim node As TreeNode = TreeViewSelectedNode
If node Is Nothing Then
MessageBoxShow(沒有選中任何節點)
Else
TreeViewNodesRemove(node)
End If
為刪除所有節點按鈕添加代碼
TreeViewNodesClear()
代碼添加完畢後運行程序分別使用添加根節點添加子節點為控件添加節點如下圖五所示
然後再試驗刪除節點的效果
三訪問控件的所有節點
因為Nodes集合中所包含的只是本級節點的集合如果某個Node包含有子節點並不會從當前的Nodes體現出來如下代碼所示我們只能訪問到所有的根節點而不是所有的節點
假定我們是在前面示例的基礎上添加一個名為遍歷節點的按鈕然後在該按鈕的Click事件中添加如下代碼
Dim node As TreeNode
Dim str As String =
For Each node In TreeViewNodes
str = str & nodeText & vbCr
Next
MessageBoxShow(str)
node = Nothing
運行後先分別為控件添加若干個根節點與子節點然後單擊遍歷節點按鈕效果如下圖六所示
很明顯我們遍歷了Nodes集合但是並沒有如期訪問到子節點怎麼解決這個問題呢?請看下一頁
如上頁的問題我們假設一個根節點的Nodes集合為Nodes該集合中的一個Node節點為NodeNode下有若干個子節點我們把它的子節點的集合稱為Nodes我們用For Each 遍歷Nodes時它訪問到Node但不會訪問Nodes集合
如果我們要訪問Nodes就需要像遍歷Nodes一樣遍歷Nodes解決辦法如下
首先建立一個過程用於遍歷一個Node節點下的子節點
Private Sub PrintNode(ByVal N As TreeNode)
DebugWriteLine(NText)
Dim node As TreeNode
For Each node In NNodes
PrintNode(node)
Next
End Sub
然後把遍歷節點的Click事件中修改為如下代碼
Dim node As TreeNode
For Each node In TreeViewNodes
PrintNode(node)
Next
node = Nothing
運行後先分別為控件添加若干個根節點與子節點然後單擊遍歷節點按鈕然後查看輸出窗口效果如下圖七所示
可以發現已經能真正地遍歷了所有節點
本文主要是了解TreeView 控件的一些主要屬性著重於掌握Nodes屬性的性質和使用請你繼續關注我們巧巧讀書網的相關文章連載我們一起去探索編程世界
From:http://tw.wingwit.com/Article/program/net/201311/11617.html