自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

實(shí)例分析VB.NET Treeview結(jié)構(gòu)

開發(fā) 后端
這里介紹VB.NET Treeview結(jié)構(gòu),Treeview是由節(jié)點(diǎn)TreeNode組成的,第一級(jí)的稱之為根節(jié)點(diǎn)TreeRoot,在根節(jié)點(diǎn)之下一級(jí)的稱之為某個(gè)根節(jié)點(diǎn)的子節(jié)點(diǎn)TreeLeaf,某個(gè)子節(jié)點(diǎn)之下一級(jí)的子節(jié)點(diǎn)就稱為該子節(jié)點(diǎn)的子節(jié)點(diǎn)。

本人很喜歡VB.NET,在工作中也很喜歡總結(jié)關(guān)于VB.NET Treeview結(jié)構(gòu)的經(jīng)驗(yàn)教訓(xùn),我們簡(jiǎn)單分析一下VB.NET Treeview結(jié)構(gòu)(筆者準(zhǔn)備在另文專門剖析一下VB.NET Treeview結(jié)構(gòu),以方便有興趣的網(wǎng)友進(jìn)行高級(jí)應(yīng)用)

Treeview是由節(jié)點(diǎn)TreeNode組成的,第一級(jí)的稱之為根節(jié)點(diǎn)TreeRoot,在根節(jié)點(diǎn)之下一級(jí)的稱之為某個(gè)根節(jié)點(diǎn)的子節(jié)點(diǎn)TreeLeaf,某個(gè)子節(jié)點(diǎn)之下一級(jí)的子節(jié)點(diǎn)就稱為該子節(jié)點(diǎn)的子節(jié)點(diǎn)。第個(gè)節(jié)點(diǎn)有兩個(gè)標(biāo)識(shí)方式,一個(gè)是它的Text,即顯示出來的內(nèi)容;另一個(gè)是它的Tag屬性,一般用唯一標(biāo)識(shí)碼對(duì)其進(jìn)行標(biāo)識(shí),以用于在使用時(shí)對(duì)節(jié)點(diǎn)的識(shí)別。在本文中,也主要用Text屬性來顯示節(jié)點(diǎn)的名稱字段,用Tag屬性來顯示節(jié)點(diǎn)的編號(hào)屬性。(節(jié)點(diǎn)編號(hào)被設(shè)為主鍵,也就是唯一的標(biāo)識(shí)了)

1.加載根節(jié)點(diǎn)
好了,我們?cè)撻_始在VB.NET中進(jìn)行演練了!第一步,當(dāng)然是看看怎么在窗體起始的時(shí)候加載根節(jié)點(diǎn):

  1. '定義公用變量  
  2. Dim myconnection As New OleDb.OleDbConnection()  
  3. Dim MyAdapater As New OleDb.OleDbDataAdapter()  
  4. Dim mycommand As New OleDb.OleDbCommand()  
  5. Dim ds As New DataSet()  
  6.  
  7. Private Sub Form1_Load(ByVal sender As System.Object, 
    ByVal e As System.EventArgs) Handles MyBase.Load  
  8. '載入根節(jié)點(diǎn)表至treeview中,作為第一級(jí)  
  9. myconnection.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;
  10. Data Source=" & Application.StartupPath & "\project.mdb"   
  11. '數(shù)據(jù)庫連接請(qǐng)自行更換  
  12. mycommand.CommandText = "SELECT 根節(jié)點(diǎn)編號(hào),根節(jié)點(diǎn)名稱 FROM 根節(jié)點(diǎn)" 
  13. mycommand.Connection = myconnection 
  14. Try  
  15. myconnection.Close()  
  16. myconnection.Open()  
  17. Dim mysqlreader As OleDb.OleDbDataReader = mycommand.ExecuteReader  
  18. TreeView1.Nodes.Clear()  
  19. While mysqlreader.Read()  
  20. Dim tree_root As New TreeNode()  
  21. tree_root.Tag = mysqlreader.GetString(0) 
  22. '把編號(hào)放入tag中  
  23. tree_root.Text = mysqlreader.GetString(1) 
  24. '樹上顯示的是根節(jié)點(diǎn)名稱  
  25. '請(qǐng)根據(jù)你數(shù)據(jù)庫字段的類型來決定是否用getstring或其它類型  
  26. TreeView1.Nodes.Add(tree_root)  
  27. End While  
  28. Catch ex As Exception  
  29. MessageBox.Show(ex.ToString, "數(shù)據(jù)表根節(jié)點(diǎn)載入錯(cuò)誤", vbOKOnly)  
  30. Finally  
  31. myconnection.Close()  
  32. End Try  
  33. TreeView1.ExpandAll()  
  34. TreeView1.Select()  
  35. End Sub 

2.點(diǎn)擊時(shí)加入子節(jié)點(diǎn)
對(duì)TreeView的點(diǎn)擊,對(duì)于TreeView控件本身,并沒有為哪一個(gè)級(jí)別的Node編寫點(diǎn)擊(選擇)事件處理程序,而是把所有節(jié)點(diǎn)的點(diǎn)擊事件都寫入了一個(gè)AfterSelect事件中。因此,在編寫點(diǎn)擊加入子節(jié)點(diǎn)的程序之前,我們還必須編寫一個(gè)查找點(diǎn)擊的節(jié)點(diǎn)是哪一級(jí)節(jié)點(diǎn)的方法。

  1. Public Function NodeLevel(ByVal n As TreeNode) As Byte  
  2. '* 找出樹中當(dāng)前節(jié)點(diǎn)的級(jí)數(shù)  
  3. Dim i As Byte = 1 
  4. Dim m As String  
  5. Do Until n.Parent Is Nothing  
  6. nn = n.Parent  
  7. i += 1  
  8. Loop  
  9. Return i  
  10. End Function 

通過這個(gè)函數(shù),就可以很方便地得到節(jié)點(diǎn)的級(jí)別?,F(xiàn)在我們可以放心地編寫節(jié)點(diǎn)選擇事件處理程序,以實(shí)現(xiàn)動(dòng)態(tài)加載各級(jí)節(jié)點(diǎn)的子節(jié)點(diǎn)。

  1. Private Sub TreeView1_AfterSelect(ByVal sender As System.Object, 
    ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles TreeView1.AfterSelect  
  2. Select Case NodeLevel(e.Node).ToString  
  3. Case "1"  
  4. If e.Node.GetNodeCount(False) = 0 Then  
  5. mycommand.CommandText = "select 第一級(jí)子節(jié)點(diǎn)編號(hào),第一級(jí)子節(jié)點(diǎn)名稱 
    from 第一級(jí)子節(jié)點(diǎn) where 根節(jié)點(diǎn)編號(hào) ='"
     & e.Node.Tag & "'"  
  6. fill_treeleaf()  
  7. End If  
  8. Case "2"  
  9. If e.Node.GetNodeCount(False) = 0 Then  
  10. mycommand.CommandText = "select 第二級(jí)子節(jié)點(diǎn)編號(hào),第二級(jí)子節(jié)點(diǎn)名稱 
    from 第二級(jí)子節(jié)點(diǎn) where 第一級(jí)子節(jié)點(diǎn)編號(hào) ='"
     & e.Node.Tag & "'"  
  11. fill_treeleaf()  
  12. End If  
  13. End Select  
  14. End Sub  
  15. Public Sub fill_treeleaf()  
  16. mycommand.Connection = myconnection 
  17. Try  
  18. myconnection.Open()  
  19. Dim mysqlreader As OleDb.OleDbDataReader = mycommand.ExecuteReader  
  20. While mysqlreader.Read()  
  21. Dim tree_leaf As New TreeNode()  
  22. tree_leaf.Tag = mysqlreader.GetString(0)  
  23. tree_leaf.Text = mysqlreader.GetString(1)  
  24. TreeView1.SelectedNode.Nodes.Add(tree_leaf)  
  25. End While  
  26. Catch ex As Exception  
  27. MsgBox(ex.Message)  
  28. Finally  
  29. myconnection.Close()  
  30. End Try  
  31. End Sub 

【編輯推薦】

  1. 詳細(xì)分析VB.NET WithEvents
  2. 淺析VB.NET局部靜態(tài)變量
  3. 原理分析VB.NET開發(fā)控件
  4. 自己動(dòng)手用代碼實(shí)現(xiàn)VB.NET ListView加載數(shù)據(jù)
  5. 詳細(xì)介紹VB.NET MyClass
責(zé)任編輯:佚名 來源: 新浪博客
相關(guān)推薦

2009-10-13 15:09:19

VB.NET使用Tre

2009-10-28 10:04:53

VB.NET XmlW

2010-01-19 18:24:29

VB.NET調(diào)用Win

2009-11-02 17:12:01

VB和VB.NET

2009-11-10 17:31:38

VB.NET注冊(cè)表

2009-10-28 14:13:32

VB.NET File

2010-01-22 10:41:33

VB.NET聲明結(jié)構(gòu)

2009-10-21 09:10:52

VB.NET壓縮

2009-10-27 08:56:22

VB.NET文件夾

2009-10-21 09:40:23

VB.NET搜索

2009-10-22 09:20:46

VB.NET Proc

2009-10-27 18:06:41

VB.NET開發(fā)控件

2009-10-15 10:57:16

VB.NET Text

2009-10-14 15:20:21

VB.NET窗體指針

2009-11-04 10:54:53

VB.NET MOVE

2009-10-12 13:11:48

VB.NET使用線程

2009-11-04 09:32:12

VB.NET Auto

2009-10-13 09:24:57

VB.NET Dock

2009-10-29 15:16:02

VB.NET文件傳送

2009-10-09 17:40:38

VB.Net問題集
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)