給你一段我曾經寫的代碼,主要是生成TreeView的節點!有什么不懂的地方你就提!
創新互聯建站專業為企業提供榆中網站建設、榆中做網站、榆中網站設計、榆中網站制作等企業網站建設、網頁設計與制作、榆中企業網站模板建站服務,十余年榆中做網站經驗,不只是建網站,更提供有價值的思路和整體網絡服務。
Public Sub InitializeTreeView(ByVal strvXL As TreeView, ByVal vrsRecordTwo As DataSet)
Dim treBaseNodeOne As TreeNode
Dim treBaseNodeTwo As TreeNode
Dim strDWDM As String
m_rsRecordTwo = g_clsSybase.SelectSC_PD_SBCSB1()
'查找供電局信息
g_clsSybase.SelectRS_ZZJG_ZZJGDMB(m_rsRecordOne)
'添加根節點
Do While m_rsRecordOne.Read
strDWDM = m_rsRecordOne.GetString(0) '獲取單位代碼
treBaseNodeOne = New TreeNode
treBaseNodeOne.Text = m_rsRecordOne.GetString(1).Trim() '獲取單位名稱
treBaseNodeOne.Name = m_rsRecordOne.GetString(1)
treBaseNodeOne.Tag = ""
strvXL.Nodes.Add(treBaseNodeOne)
'添加樹結構第二層
Dim drsTwo() As DataRow
drsTwo = m_rsRecordTwo.Tables(0).Select("SSDW='" strDWDM "' and SC__XLBM is null")
For Each dr As DataRow In drsTwo
treBaseNodeTwo = New TreeNode
treBaseNodeTwo.Text = dr.Item("XLMC").ToString.Trim
treBaseNodeTwo.Name = dr.Item("XLMC")
treBaseNodeTwo.Tag = dr.Item("XLBM")
treBaseNodeOne.Nodes.Add(treBaseNodeTwo)
Next
Loop
m_rsRecordOne.Close()
End Sub
在中 TreeView(樹型結構)控件是顯示節點(Node)對象的級層結構 它通常用于顯示一些有等級結構的信息 我們最為熟悉的就是Windows資源管理器左邊顯示文件和文件夾的窗口 在工具箱中 TreeView 控件的圖標如下圖一所示
TreeView控件的每個節點(Node對象)包含了一個標簽和可選的點位圖 每個節點又可能包含有若干個的子節點 可以通過控制某個節點來展開顯示或者折疊隱藏它所包含的子節點
一 TreeView 控件的一些常用屬性
CheckBoxes 屬性 指示是否在樹視圖控件中的樹節點旁顯示復選框
FullRowSelect 屬性 當 FullRowSelect 為 true 時 選擇突出顯示將跨越樹視圖的整個寬度 即整個顯示區域的寬度而不僅僅是樹節點標簽的寬度 如果 ShowLines 設置為 true 則將忽略 FullRowSelect 屬性
HideSelection 屬性 指示選定的樹節點是否即使在樹視圖已失去焦點時仍會保持突出顯示
HotTracking 屬性 如果 HotTracking 屬性設置為 true 那么當鼠標指針移過每個樹節點標簽時 樹節點標簽都將具有超級鏈接的外觀 Underline 字體樣式將應用于 Font 而 ForeColor 將設置為藍色 從而使標簽顯示為鏈接 注意 如果 CheckBoxes 屬性設置為 true HotTracking 屬性將失效
Indent 屬性 設置每個子樹節點級別的縮進距離(以像素為單位)
ItemHeight 屬性 設置樹視圖控件中每個樹節點的高度
Nodes 屬性 獲取分配給樹視圖控件的樹節點集合 這個屬性是TreeView 控件最重要的屬性之一 我們下文將會對它進行更加的詳細的說明
PathSeparator 屬性 樹節點路徑(TreeNode FullPath 屬性)所使用的分隔符串 默認為反斜杠字符 (\) 樹節點路徑包括一組由 PathSeparator 分隔符串分隔的樹節點標簽 標簽的范圍為根樹節點到所需的樹節點 如下代碼我們可以獲得當前選中的節點的路徑
MessageBox Show(TreeView SelectedNode FullPath)
SelectedNode 屬性 獲取或設置當前在樹視圖控件中選定的樹節點 如果沒有選定任何節點 則 SelectedNode 屬性則為Nothing
ShowLines 屬性 指示是否在樹視圖控件中的樹節點之間繪制連線
ShowPlusMinus 屬性 指示是否在包含子樹節點的樹節點旁顯示加號 (+) 和減號 ( ) 按鈕
ShowRootLines 屬性 指示是否在樹視圖根處的樹節點之間繪制連線
如下圖二所示 為ShowLines 屬性 ShowPlusMinus 屬性 ShowRootLines 屬性都設置為True的情形
二 為TreeView 控件添加節點
TreeView 控件的 Nodes 屬性包含了它所有的節點 下面我們就來了解如何為樹狀控件添加節點
通過樹節點編輯器添加
選中TreeView 控件 在它的屬性對話框中找到Nodes 屬性 然后單擊它后面的省略號 彈出 樹節點編輯器 如下圖三所示
然后通過編輯器上的 添加根 來添加根節點 通過 添加子級 來為選中的節點添加子節點 通過 刪除 來刪除選定的節點 標簽 輸入框確定節點的名稱 注意 只有設置了TreeView 控件的ImageList 屬性才能選擇設置節點的圖像
通過編程方式添加節點
給TreeView添加結點用到的是 Nodes Add 方法 首先選定要添加子結點的結點才能應用這個方法
TreeView中的結點的組織關系是父結點管理子結點的關系 也就是說 子結點組成的集合就是父結點的 Nodes 屬性 子結點的 Index 屬性 是根據其在子結點集合中的位置而決定的 而不是整棵樹中結點的位置 根據這個特點 若想找到指定結點須按以下的語法
TreeViewName Nodes Item(Index ) Nodes
而添加結點的方法為
TreeViewName Nodes Item(Index ) Nodes Add( NodeText )或
TreeViewName Nodes Item(Index ) Nodes Add( objNode )
如下代碼所示為選中的節點添加一個子節點
TreeView SelectedNode Nodes Add( )
編程刪除節點
使用Nodes屬性的Remove 方法刪除單個節點 也可以使用Clear 方法清除所有的節點 如下代碼所示
刪除選定的節點
TreeView Nodes Remove(TreeView SelectedNode)
清除TreeView 控件的所有節點
TreeView Nodes Clear()
示例演示
我們現在用一個實例來看如何使用Nodes屬性來實現代碼編程添加刪除樹形控件的節點 首先為設計如下圖四所示的程序界面 其中有四個Button 控件 一個TreeView 控件
為 添加根節點 按鈕添加如下代碼
TreeView Nodes Add( 根節點 (TreeView GetNodeCount(False) + ))
注意 GetNodeCount方法為獲得本級別的節點數 可以通過參數False來指定不包括它的子節點
為 添加子節點 按鈕添加如下代碼
Dim node As TreeNode = TreeView SelectedNode
If Not node Is Nothing Then
node Nodes Add( 子節點 (node GetNodeCount(False) + ))
Else
MessageBox Show( 沒有選中任何節點 )
End If
注意 TreeNode GetNodeCount 方法返回的是分配給 Nodes 集合的子樹節點的數目
為 刪除單個節點 按鈕添加代碼
Dim node As TreeNode = TreeView SelectedNode
If node Is Nothing Then
MessageBox Show( 沒有選中任何節點 )
Else
TreeView Nodes Remove(node)
End If
為 刪除所有節點 按鈕添加代碼
TreeView Nodes Clear()
代碼添加完畢后 運行程序 分別使用 添加根節點 添加子節點 為控件添加節點 如下圖五所示
然后再試驗刪除節點的效果
三 訪問控件的所有節點
因為Nodes集合中所包含的只是本級節點的集合 如果某個Node包含有子節點 并不會從當前的Nodes體現出來 如下代碼所示 我們只能訪問到所有的根節點而不是所有的節點
假定我們是在前面示例的基礎上添加一個名為 遍歷節點 的按鈕 然后在該按鈕的Click事件中添加如下代碼
Dim node As TreeNode
Dim str As String =
For Each node In TreeView Nodes
str = str node Text vbCr
Next
MessageBox Show(str)
node = Nothing
運行后 先分別為控件添加若干個根節點與子節點 然后單擊 遍歷節點 按鈕 效果如下圖六所示
很明顯 我們遍歷了Nodes集合 但是并沒有如期訪問到子節點 怎么解決這個問題呢?請看下一頁
如上頁的問題 我們假設一個根節點的Nodes集合為Nodes 該集合中的一個Node節點為Node Node 下有若干個子節點 我們把它的子節點的集合稱為Nodes 我們用For Each 遍歷Nodes 時 它訪問到Node 但不會訪問Nodes 集合
如果我們要訪問Nodes 就需要像遍歷Nodes 一樣遍歷Nodes 解決辦法如下
首先 建立一個過程用于遍歷一個Node節點下的子節點
Private Sub PrintNode(ByVal N As TreeNode)
Debug WriteLine(N Text)
Dim node As TreeNode
For Each node In N Nodes
PrintNode(node)
Next
End Sub
然后把 遍歷節點 的Click事件中修改為如下代碼
Dim node As TreeNode
For Each node In TreeView Nodes
PrintNode(node)
Next
node = Nothing
運行后 先分別為控件添加若干個根節點與子節點 然后單擊 遍歷節點 按鈕 然后查看 輸出 窗口 效果如下圖七所示
可以發現已經能真正地遍歷了所有節點
lishixinzhi/Article/program/net/201311/11617
軟糖來回答羅。
treenode只有text和name兩個string屬性。
所以給你寫的函數是返回string數組,如需要可自行轉換類型Integer
Private?Function?GetParents(ByVal?node?As?TreeNode)?As?String()
Dim?list?As?New?List(Of?String)
Do?Until?node.Parent?Is?Nothing
node?=?node.Parent
list.Add(node.Text)
Loop
Return?list.ToArray()
End?Function
下面是Listbox1的測試代碼,把父節點都添加到Listbox1(在Click后)
Private?Sub?ListBox1_Click(sender?As?Object,?e?As?EventArgs)?Handles?ListBox1.Click
Dim?k?=?GetParents(TreeView1.Nodes(0).Nodes(0).Nodes(0).Nodes(0))
ListBox1.Items.AddRange(k)
End?Sub
可以,但要先通過鼠標位置獲取節點,不然得到的節點還是上一次選中的,不直觀。
分享文章:vb.nettree的簡單介紹
URL網址:http://m.newbst.com/article2/dogodoc.html
成都網站建設公司_創新互聯,為您提供網站建設、移動網站建設、云服務器、品牌網站設計、App開發、網站維護
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯