Office中國(guó)論壇/Access中國(guó)論壇

 找回密碼
 注冊(cè)

QQ登錄

只需一步,快速開始

返回列表 發(fā)新帖
查看: 88202|回復(fù): 492
打印 上一主題 下一主題

三小時(shí)掌握TREEVIEW控件

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
1#
發(fā)表于 2005-12-1 21:02:00 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
三小時(shí)掌握TREEVIEW控件

能不能掌握控件的使用,是業(yè)余向準(zhǔn)專業(yè)進(jìn)步的關(guān)鍵。雖然我本人不太喜歡用控件,因?yàn)榛诓煌牟僮鳝h(huán)境成品后效果很難保證。但有些成熟控件,會(huì)使用還是能提高軟件水平。比如TREEVIEW控件,TREEVIEW控件,也叫樹控件,主要用于層級(jí)顯示和控制,應(yīng)用廣泛。我一直很想學(xué)習(xí)這個(gè)控件的使用,但每次都沒(méi)有學(xué)成,總感覺(jué)很難。前幾天有空,狠下心來(lái)將論壇搜索一遍,發(fā)現(xiàn)也不是太難,在很短時(shí)間內(nèi)只要方法得當(dāng),很快可以掌握,因?yàn)槲沂遣锁B,所以用菜鳥的方法和大家交流,可能大家學(xué)得更快一點(diǎn),只要你用心,三個(gè)小時(shí)一定可以掌握。請(qǐng)大家一定要自己動(dòng)手做,只有做才能理解,光看幫助和說(shuō)明是沒(méi)有用的。

熱身:
理解層級(jí)概念,層級(jí)理論上可以有無(wú)限級(jí),一般用到四,五級(jí)也夠用了。最上級(jí)的只能有一個(gè),我們把它叫做“爺”,接下來(lái)是“父”,再是“子”,再是“孫”,接下來(lái)是“曾孫”......,匯總?cè)缦拢骸盃,父,子,孫,曾孫”,這里是5級(jí)關(guān)系,除了“爺”只能有一個(gè)外,其余可以有無(wú)限個(gè)。記住這些,下面要用。


第一小時(shí):學(xué)習(xí)直接用代碼將數(shù)據(jù)填充到樹控件中。
為什么要先學(xué)習(xí)直接用代碼將數(shù)據(jù)填充到樹控件中?因?yàn)檫@種方法是最簡(jiǎn)單的,代碼也最容易理解,學(xué)習(xí)樹控件,先將這個(gè)學(xué)會(huì),已經(jīng)掌握了一半,所以先不要急著想怎么將表中的數(shù)據(jù)填充到樹控件中,在第一小時(shí)里,樹控件和表完全沒(méi)有關(guān)系。
目的:我們要在樹控件中建立如下的一個(gè)3層級(jí)關(guān)系

   水果
    |
    |__蘋果
    |  |__紅富士
    |  |__國(guó)光
    |
    |__葡萄
       |__紅提子
       |__青提子

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

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

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

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

Private Sub Form_Load()
'* -----------------------------------------------------------------
'*用代碼將數(shù)據(jù)填充到樹控件中
'* -----------------------------------------------------------------
  Dim Nodeindex As Node
'*------------------------------------------------------------------
'*解釋:定義Node
'*Node是樹控件的對(duì)象
'*每個(gè)Node都有三個(gè)東西,圖標(biāo),文本,索引值
'*圖標(biāo)和文本都是實(shí)際顯示出來(lái)的,索引值是隱含的
'*------------------------------------------------------------------
    '設(shè)置最頂級(jí)的“爺”:
'* ---------------------------
    Set Nodeindex = TreeView.Nodes.Add(, , "爺", "水果", "K1")
    Nodeindex.Sorted = True
'*------------------------------------------------------------------
'*樹控件填充數(shù)據(jù)的方法是Nodes.Add
'*括號(hào)內(nèi)是Add方法的參數(shù)<b






Office交流網(wǎng)開發(fā)的Access專用樹控件免費(fèi)下載-支持64位
http://m.mzhfr.cn/book/accesstree/5.html
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享分享 分享淘帖 訂閱訂閱
2#
 樓主| 發(fā)表于 2005-12-1 21:04:00 | 只看該作者

第二小時(shí)

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

目的:將數(shù)據(jù)庫(kù)中的數(shù)據(jù)與樹控件綁定
背景:我們想在樹控件中顯示銷售客戶的層級(jí)列表,這個(gè)銷售客戶的分層是這樣的,先按“大區(qū)”,再按“省份”,最后到“客戶”我們?cè)跀?shù)據(jù)庫(kù)中建立了三個(gè)表,字段如下:
大區(qū)表:大區(qū)ID,大區(qū)名稱
省份表:省份ID,省份名稱,所屬大區(qū)
客戶表:客戶ID,客戶名稱,所屬省份
這三個(gè)表互相建立了關(guān)系

1、新建一個(gè)窗體,在窗體上放置兩個(gè)控件,一個(gè)是Treeview,一個(gè)是Imagelist
2、設(shè)置這兩個(gè)控件的屬性在這里和第一小時(shí)唯一的區(qū)別是我們?cè)贗magelist控件的設(shè)置時(shí),導(dǎo)入了兩個(gè)圖標(biāo),一個(gè)KEY為K1,一個(gè)為K2,原來(lái)樹控件的Node圖標(biāo)是可以變化的,我們準(zhǔn)備某個(gè)項(xiàng)沒(méi)有選中時(shí)的圖標(biāo)是一個(gè)沒(méi)有打開的文件夾,選中時(shí)是一個(gè)打開的文件夾,以區(qū)別。
3、編寫代碼,如下:

Private Sub Form_Load()
'* -----------------------------------------------------------------
'* 用數(shù)據(jù)庫(kù)表(查詢也一樣)中數(shù)據(jù)填充樹控件
'* -----------------------------------------------------------------
    Dim Rec As New ADODB.Recordset
    Dim stRecQL As String
    Dim Item As Integer
    Dim i As Integer
    Dim nodindex As Node
'* -----------------------------------------------------------------
'* 定義各類
'* -----------------------------------------------------------------

   
   
    '設(shè)置最頂級(jí)的"爺"
'* ---------------------------
    Set nodindex = TreeView.Nodes.Add(, , "爺", "銷售客戶", "K1", "K2")
    nodindex.Sorted = True
'* -----------------------------------------------------------------
'*這里的設(shè)置跟第一小時(shí)里基本是一樣的
'*但最后多了一個(gè)"K2"的參數(shù),"K1"代表的是未被選中時(shí)的圖標(biāo),"K2"代表是被選中后的圖標(biāo)
'*仔細(xì)觀察一下,你會(huì)發(fā)現(xiàn)選中和沒(méi)選中的圖標(biāo)是不一樣的,一個(gè)是一個(gè)文件夾,一個(gè)是一個(gè)打開的文件夾
'* -----------------------------------------------------------------
   
    '設(shè)置第二級(jí)"父"
'* ---------------------------
    Rec.Open "大區(qū)表", CurrentProject.Connection, adOpenKeyset, adLockOptimistic, adCmdTableDirect
    For i = 0 To Rec.RecordCount - 1
        Set nodindex = TreeView.Nodes.Add("爺", tvwChild, "父" & Rec.Fields("大區(qū)ID"), Rec.Fields("大區(qū)名稱"), "K1", "K2")
        nodindex.Sorted = True
        Rec.MoveNext
    Next
    Rec.Close
'* -----------------------------------------------------------------
'*第一行意思是打開一個(gè)表去尋找數(shù)據(jù)(查詢也是可以的)
'*關(guān)鍵在與Add參數(shù)的變化
'*大家看第三個(gè)參數(shù),在第一小時(shí)里,這里是"父1",這里用Rec.Fields("大區(qū)ID")來(lái)代替"1",意思是用表的編號(hào)來(lái)代替手工編號(hào)
'*第四個(gè)參數(shù)也是一樣,直接用表中的名稱字段來(lái)取代原來(lái)我們手工的命名
'* -----------------------------------------------------------------

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

    '設(shè)置第四級(jí)"孫"
'* ---------------------------
   
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")
        nodind
3#
 樓主| 發(fā)表于 2005-12-1 21:05:00 | 只看該作者

第三小時(shí)

第三小時(shí):將樹控件與窗體結(jié)合
我們做樹控件,當(dāng)然不可能單單為了顯示層級(jí)數(shù)據(jù),我們希望跟窗體結(jié)合,當(dāng)我們單擊樹控件中的某個(gè)客戶時(shí),窗體上能相應(yīng)的轉(zhuǎn)到這個(gè)客戶的資料。

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

rivate Sub Treeview_NodeClick(ByVal Node As Object)
'* -----------------------------------------------------------------
'*樹控件的鼠標(biāo)點(diǎn)擊事件為NodeClick
'* -----------------------------------------------------------------
Dim str As String
'* -----------------------------------------------------------------
'*定義一個(gè)篩選
'* -----------------------------------------------------------------
If Node.Text = "銷售客戶" Or Node.Key Like "父*" Or Node.Key Like "子*" Then
str = ""
'* -----------------------------------------------------------------
'*在第一小時(shí)里,我們說(shuō)了Node有三個(gè)東西,圖標(biāo),文本,索引值
'*文本就是text,索引值就是Key
'這里將就是說(shuō)當(dāng)我們點(diǎn)擊"爺","父"或"子"層的時(shí)候,不篩選窗體
'*這個(gè)條件也可寫成: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
'*按指定的條件進(jìn)行窗體篩選
End Sub

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

學(xué)習(xí)很有樂(lè)趣,但寫文章卻很無(wú)聊,如果你通過(guò)這篇文章學(xué)會(huì)了樹控件的基本使用,跟個(gè)貼吧,也好讓我有點(diǎn)成就感。

附上附件
游客,如果您要查看本帖隱藏內(nèi)容請(qǐng)回復(fù)


[此貼子已經(jīng)被作者于2005-12-1 13:09:29編輯過(guò)]

本帖子中包含更多資源

您需要 登錄 才可以下載或查看,沒(méi)有帳號(hào)?注冊(cè)

x
4#
發(fā)表于 2005-12-1 21:40:00 | 只看該作者
先頂後看
5#
發(fā)表于 2005-12-2 05:40:00 | 只看該作者
多謝指導(dǎo),感激不盡。
6#
發(fā)表于 2005-12-2 06:24:00 | 只看該作者
互相交流直得推崇!![em08]
7#
發(fā)表于 2005-12-2 18:40:00 | 只看該作者
還沒(méi)學(xué)會(huì),頂先
8#
發(fā)表于 2005-12-2 19:01:00 | 只看該作者
頂一下,支持[em01]



這么好的例子附件沒(méi)了可惜,我上傳一個(gè)!呵呵!
[ 本帖最后由 zyz218 于 2007-11-24 08:45 編輯 ]

本帖子中包含更多資源

您需要 登錄 才可以下載或查看,沒(méi)有帳號(hào)?注冊(cè)

x
9#
發(fā)表于 2005-12-2 19:46:00 | 只看該作者
銷售客戶,爺,父,子是關(guān)鍵字???好像窗體中沒(méi)這些控件????////////
10#
發(fā)表于 2005-12-2 21:03:00 | 只看該作者
謝謝分享,
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則

QQ|站長(zhǎng)郵箱|小黑屋|手機(jī)版|Office中國(guó)/Access中國(guó) ( 粵ICP備10043721號(hào)-1 )  

GMT+8, 2025-7-13 08:05 , Processed in 0.121372 second(s), 35 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回復(fù) 返回頂部 返回列表