<output id="os3gq"><ruby id="os3gq"></ruby></output>

    1. <mark id="os3gq"></mark>
    2. 三小時掌握TREEVIEW控件 -張志
      Access軟件網QQ交流學習群(群號碼198465573),歡迎您的加入!
      首頁 >技術文章> 綜合其它


      三小時掌握TREEVIEW控件

      發表時間:2007/7/5 評論(51) 瀏覽(29145)  評論 | 加入收藏 | 復制
         
      摘 要:三小時掌握TREEVIEW控件 
      正 文:
      TREEVIEW控件在正常ACCESS數據庫使用中是很頻繁的,下面這篇文章給大家分享一下:

      一、詳見如下:

      能不能掌握控件的使用,是業余向準專業進步的關鍵。雖然我本人不太喜歡用控件,因為基于不同的操作環境成品后效果很難保證。但有些成熟控件,會使用還是能提高軟件水平。比如TREEVIEW控件,TREEVIEW控件,也叫樹控件,主要用于層級顯示和控制,應用廣泛。我一直很想學習這個控件的使用,但每次都沒有學成,總感覺很難。前幾天有空,狠下心來將論壇搜索一遍,發現也不是太難,在很短時間內只要方法得當,很快可以掌握,因為我是菜鳥,所以用菜鳥的方法和大家交流,可能大家學得更快一點,只要你用心,三個小時一定可以掌握。請大家一定要自己動手做,只有做才能理解,光看幫助和說明是沒有用的。

       

      熱身:
      理解層級概念,層級理論上可以有無限級,一般用到四,五級也夠用了。最上級的只能有一個,我們把它叫做“爺”,接下來是“父”,再是“子”,再是“孫”,接下來是“曾孫”......,匯總如下:“爺,父,子,孫,曾孫”,這里是5級關系,除了“爺”只能有一個外,其余可以有無限個。記住這些,下面要用。

       


      第一小時:學習直接用代碼將數據填充到樹控件中。
      為什么要先學習直接用代碼將數據填充到樹控件中?因為這種方法是最簡單的,代碼也最容易理解,學習樹控件,先將這個學會,已經掌握了一半,所以先不要急著想怎么將表中的數據填充到樹控件中,在第一小時里,樹控件和表完全沒有關系。
      目的:我們要在樹控件中建立如下的一個3層級關系

       

         水果
          |
          |__蘋果
          |  |__紅富士
          |  |__國光
          |
          |__葡萄
             |__紅提子
             |__青提子

       

      解釋:水果包含2種,一種是蘋果,一種是葡萄,蘋果又包含2種,一種是紅富士,一種是國光,葡萄也如此。
      在這里:“爺”是水果,“父”是蘋果,葡萄,“子”是紅富士,國光,紅提子,青提子。概括如下:
      爺(只能有一個):水果
      父(這里有2個):父1:蘋果;父2:葡萄
      子(這里有4個):子1:紅富士(父1蘋果的子);子2:國光(父1蘋果的子);子3:紅提子(父2葡萄的子);子4:青提子(父2葡萄的子)
            

       

      1、新建一個窗體,在窗體上放置兩個控件,一個是Treeview,一個是Imagelist
      如何找到這兩個控件?
      Treeview控件在“工具箱”的榔頭加扳手圖標(其他控件)中選“Microsoft Treeview Control,Version 6.0"
      Imagelist控件在“工具箱”的榔頭加扳手圖標(其他控件)中選“Microsoft Imagelist Control,Version 6.0"
      Treeview控件大家都明白干什么用的,Imagelist控件是干什么用呢?原來這個控件是放圖標用的,如果你想在樹控件中顯示圖標的,這個圖標都將儲存在ImageList控件中。

       

      2、設置這兩個控件的屬性
      首先要講清楚控件的屬性設置有2種,一種是設置這個控件在ACCESS中的屬性,比如名稱等。一種是設置這個控件本身的屬性。要設置這個控件在ACCESS中的屬性,選中控件后按鼠標右鍵選“屬性”就可以了。跟我們平時設置文本框什么的一樣。要設置這個控件本身的屬性,只要雙擊這個控件就可以了。
      1)設置Treeview控件在ACCESS中的名稱屬性,將名稱設置為“Treeview"
      2)設置Imagelist控件在ACCESS中的名稱屬性,將名稱設置為“Image"
      2)設置Imagelist控件本身的屬性,雙擊控件后,在彈出來的設置框中選“Images",單擊“Insert Picture"按鈕,在你電腦中選擇你需要的圖標。在“Key:”欄中填入“K1”。其他默認設置不用改。
      3)設置Treeview控件本身的屬性,雙擊控件后,在彈出來的設置框中選“General”,在這個選項面版中有很多項設置,大多數是設置樹控件的顯示格式,你自己慢慢研究。這里我們將第一項“Style"選7,在第五項“Imagelist"選項中將我們放置的Imagelist控件“Image"選上。這項設置就將圖標和樹控件聯系了起來。

       

      3、寫代碼將數據填充到樹控件中
      代碼寫在哪里?我們希望窗體一打開,數據就自動填充在樹控件中,所以這個代碼就寫在窗體的加載事件中,代碼及解釋如下:

       

      Private Sub Form_Load()
      '* -----------------------------------------------------------------
      '*用代碼將數據填充到樹控件中
      '* -----------------------------------------------------------------
        Dim Nodeindex As Node
      '*------------------------------------------------------------------
      '*解釋:定義Node
      '*Node是樹控件的對象
      '*每個Node都有三個東西,圖標,文本,索引值
      '*圖標和文本都是實際顯示出來的,索引值是隱含的
      '*------------------------------------------------------------------
          '設置最頂級的“爺”:
      '* ---------------------------
          Set Nodeindex = TreeView.Nodes.Add(, , "爺", "水果", "K1")
          Nodeindex.Sorted = True
      '*------------------------------------------------------------------
      '*樹控件填充數據的方法是Nodes.Add
      '*括號內是Add方法的參數
      '*在這里“爺”是索引值,“水果”是將顯示的文本,“K1”是圖標的索引值
      '*Sorted是指Node的排序,True就是指采用排序,默認是按拼音
      '*第一,二個參數是空的
      '*具體的參數設置以后你可以慢慢詳細研究
      '*------------------------------------------------------------------   
          

          '設置第二級“父”
      '* ---------------------------
         Set Nodeindex = TreeView.Nodes.Add("爺", tvwChild, "父1", "蘋果", "K1")
         Nodeindex.Sorted = True
          
         Set Nodeindex = TreeView.Nodes.Add("爺", tvwChild, "父2", "葡萄", "K1")
         Nodeindex.Sorted = True
      '*------------------------------------------------------------------
      '*第一個參數“爺”是指這一層對應上層“爺”的
      '*tvwChild參數是規定格式,指相對來說,這一層是爺的子層
      '*“父1”是索引值,因為“父”有2個,而索引值是唯一的,所以要編號,用“父1”“父2”分開
      '*“蘋果”“葡萄”是要顯示的文本,K1是顯示圖標的索引值
      '*現在知道為什么在“爺”層設置時,第一,第二個參數是空的,因為這是最頂層
      '*------------------------------------------------------------------
          
          '設置第三級“子”
      '* ---------------------------
         Set Nodeindex = TreeView.Nodes.Add("父1", tvwChild, "子1", "紅富士", "K1")
         Nodeindex.Sorted = True
          
         Set Nodeindex = TreeView.Nodes.Add("父1", tvwChild, "子2", "國光", "K1")
         Nodeindex.Sorted = True

       

         Set Nodeindex = TreeView.Nodes.Add("父2", tvwChild, "子3", "紅提子", "K1")
         Nodeindex.Sorted = True

       

         Set Nodeindex = TreeView.Nodes.Add("父2", tvwChild, "子4", "青提子", "K1")
         Nodeindex.Sorted = True
      '*------------------------------------------------------------------
      '*第一個參數“父1,2”是指這一層對應上層“父”的,但要注意對應的是“父1”還是“父2”
      '*tvwChild參數是規定格式,指相對來說,這一層是父的子層
      '*“子1”是索引值,因為“子”有4個,而索引值是唯一的,所以要編號,用“1,2,3,4”分開
      '*“紅富士”等是要顯示的文本,K1是顯示圖標的索引值
      '*------------------------------------------------------------------
      End Sub

       

      就這么多代碼,總共十幾行,就可以在樹控件中顯示數據了,很簡單吧。第一小時結束。

      第二小時:學習怎樣將樹控件和數據庫中的數據綁起來
      在第一小時里,我們學習了怎樣直接用代碼填充樹控件,但在實際使用中,這種方法的應用性不大,只有將樹控件與數據庫中的數據結合起來,才能有真正的應用。其實綁定數據庫的方法和直接用代碼填充是大同小異的,我們要做的只是將Add的參數里,原來我們手工輸入的變換一下,讓程序知道去數據庫中找數據。

       

      目的:將數據庫中的數據與樹控件綁定
      背景:我們想在樹控件中顯示銷售客戶的層級列表,這個銷售客戶的分層是這樣的,先按“大區”,再按“省份”,最后到“客戶”我們在數據庫中建立了三個表,字段如下:
      大區表:大區ID,大區名稱
      省份表:省份ID,省份名稱,所屬大區
      客戶表:客戶ID,客戶名稱,所屬省份
      這三個表互相建立了關系

       

      1、新建一個窗體,在窗體上放置兩個控件,一個是Treeview,一個是Imagelist
      2、設置這兩個控件的屬性在這里和第一小時唯一的區別是我們在Imagelist控件的設置時,導入了兩個圖標,一個KEY為K1,一個為K2,原來樹控件的Node圖標是可以變化的,我們準備某個項沒有選中時的圖標是一個沒有打開的文件夾,選中時是一個打開的文件夾,以區別。
      3、編寫代碼,如下:

       

      Private Sub Form_Load()
      '* -----------------------------------------------------------------
      '* 用數據庫表(查詢也一樣)中數據填充樹控件
      '* -----------------------------------------------------------------
          Dim Rec As New ADODB.Recordset
          Dim stRecQL As String
          Dim Item As Integer
          Dim i As Integer
          Dim nodindex As Node
      '* -----------------------------------------------------------------
      '* 定義各類
      '* ----------------------------------------------------------------- 
         
          '設置最頂級的"爺"
      '* ---------------------------
          Set nodindex = TreeView.Nodes.Add(, , "爺", "銷售客戶", "K1", "K2")
          nodindex.Sorted = True
      '* -----------------------------------------------------------------
      '*這里的設置跟第一小時里基本是一樣的
      '*但最后多了一個"K2"的參數,"K1"代表的是未被選中時的圖標,"K2"代表是被選中后的圖標
      '*仔細觀察一下,你會發現選中和沒選中的圖標是不一樣的,一個是一個文件夾,一個是一個打開的文件夾
      '* -----------------------------------------------------------------
          
          '設置第二級"父"
      '* ---------------------------
          Rec.Open "大區表", CurrentProject.Connection, adOpenKeyset, adLockOptimistic, adCmdTableDirect
          For i = 0 To Rec.RecordCount - 1
              Set nodindex = TreeView.Nodes.Add("爺", tvwChild, "父" & Rec.Fields("大區ID"), Rec.Fields("大區名稱"), "K1", "K2")
              nodindex.Sorted = True
              Rec.MoveNext
          Next
          Rec.Close
      '* -----------------------------------------------------------------
      '*第一行意思是打開一個表去尋找數據(查詢也是可以的)
      '*關鍵在與Add參數的變化
      '*大家看第三個參數,在第一小時里,這里是"父1",這里用Rec.Fields("大區ID")來代替"1",意思是用表的編號來代替手工編號
      '*第四個參數也是一樣,直接用表中的名稱字段來取代原來我們手工的命名
      '* -----------------------------------------------------------------

       

          '設置第三級"子"
      '* ---------------------------
         Rec.Open "省份表", CurrentProject.Connection, adOpenKeyset, adLockOptimistic, adCmdTableDirect
          For i = 0 To Rec.RecordCount - 1
              Set nodindex = TreeView.Nodes.Add("父" & Rec.Fields("所屬大區"), tvwChild, "子" & Rec.Fields("省份ID"), Rec.Fields("省份名稱"), "K1", "K2")
              nodindex.Sorted = True
              Rec.MoveNext
          Next
          Rec.Close
      '* -----------------------------------------------------------------
      '*不用再解釋了吧
      '*要注意的是,定義第一個參數的時候,不是用"父" & Rec.Fields("大區ID"),而是用"父" & Rec.Fields("所屬大區")
      '*這個意思是:用省份表中關聯大區表的字段,而不是直接用大區表的ID
      '* -----------------------------------------------------------------

       

          '設置第四級"孫"
      '* ---------------------------
          
      Rec.Open "客戶表", CurrentProject.Connection, adOpenKeyset, adLockOptimistic, adCmdTableDirect
          For i = 0 To Rec.RecordCount - 1
              Set nodindex = TreeView.Nodes.Add("子" & Rec.Fields("所屬省份"), tvwChild, "孫" & Rec.Fields("客戶ID"), Rec.Fields("客戶名稱"), "K1", "K2")
              nodindex.Sorted = True
              Rec.MoveNext
          Next
          Rec.Close
          
      '* -----------------------------------------------------------------
      '*到此你應該完全明白了
      '* -----------------------------------------------------------------

       

      End Sub

       

      第二小時結束

      第三小時:將樹控件與窗體結合
      我們做樹控件,當然不可能單單為了顯示層級數據,我們希望跟窗體結合,當我們單擊樹控件中的某個客戶時,窗體上能相應的轉到這個客戶的資料。

       

      目的:將樹控件與窗體結合
      1、我們還是沿用第二個小時里的例子,但在建立窗體時,將窗體的數據來源設為“客戶表”,并在窗體中放置好客戶表的字段。
      2、寫入如下代碼:

       

      Private Sub Treeview_NodeClick(ByVal Node As Object)
      '* -----------------------------------------------------------------
      '*樹控件的鼠標點擊事件為NodeClick
      '* -----------------------------------------------------------------
      Dim str As String
      '* -----------------------------------------------------------------
      '*定義一個篩選
      '* -----------------------------------------------------------------
      If Node.Text = "銷售客戶" Or Node.Key Like "父*" Or Node.Key Like "子*" Then
      str = ""
      '* -----------------------------------------------------------------
      '*在第一小時里,我們說了Node有三個東西,圖標,文本,索引值
      '*文本就是text,索引值就是Key
      '這里將就是說當我們點擊"爺","父"或"子"層的時候,不篩選窗體
      '*這個條件也可寫成:If Node.key = "爺" Or Node.Key Like "父*" Or Node.Key Like "子*" Then
      '* -----------------------------------------------------------------
      Else
      str = "[客戶名稱]='" & Node.Text & "'"
      End If
      Me.Form.FilterOn = True
      Me.Form.Filter = str
      '*按指定的條件進行窗體篩選
      End Sub

       

      明白了吧,所謂結合窗體,實際不過是進行窗體篩選而已。第三小時結束(5分鐘也夠了,哈哈)

       

      學習很有樂趣,但寫文章卻很無聊,如果你通過這篇文章學會了樹控件的基本使用,跟個貼吧,也好讓我有點成就感。


      Access軟件網交流QQ群(群號:198465573)
       
       相關文章
      [薦]如何三小時掌握TREEVIEW控件  【eddieliu   2007/11/24】
      實現樹形節點的拖拽\拖放功能!  【manter  2009/9/29】
      Treeview控件應用及三小時學會樹控件教程  【網行者  2012/3/30】
      史上最強樹控件源碼\暴強樹TreeView功能齊全的通用示例/添加...  【風行  2012/7/15】
      從國外論壇中找到的一個treeview示例  【Brent Spaulding  2013/4/15】
      【Access小品】TreeView節點拖曳示例  【煮江品茶  2013/11/29】
      TreeView樹型控件應用指南  【Aaron  2013/12/9】
       
       訪客評論
      2020/2/21云上觀日
      樓主好棒,跟你學并快樂著

      2019/6/5廈門三道霖自動化有限公司
      辛苦,辛苦,謝謝

      2019/3/26剛剛好

      2019/3/5joage
      果然是簡明易懂

      2018/3/6鄭謙
      很好的帖子。不過對Key的設定不太明白。這個Key是不可見的,Key可否用相同的編碼呢?還是必須不同的K1,K2,K3...?

      2017/11/14沈陸江
      辛苦樓主,十分感謝您!

      2017/4/1一如既往
      按照步驟來的,
      Set Nodeindex = TreeView.Nodes.Add(, , "爺", "水果", "K1")

      運行時錯誤 '35613'
      ImageList must be initialized before it can be used.


      2017/3/25一塔湖圖
      太好了

      2016/10/7胡軼毓
      謝謝分享

      2016/4/7朱亮
      入門必學

      總記錄:44篇  頁次:1/5 9 1 2 3 4 5 8 :
       
       發表評論
      評論內容 (必填)

      常見問答
      技術分類
      相關資源
      文章搜索
      關于作者

      張志

      文章分類

      文章存檔

      友情鏈接
       
         
      湖北11选5