三小時(shí)掌握TREEVIEW控件
三小時(shí)掌握TREEVIEW控件
能不能掌握控件的使用,是業(yè)余向準(zhǔn)專(zhuān)業(yè)進(jìn)步的關(guān)鍵。雖然我本人不太喜歡用控件,因?yàn)榛诓煌牟僮鳝h(huán)境成品后效果很難保證。但有些成熟控件,會(huì)使用還是能提高軟件水平。比如TREEVIEW控件,TREEVIEW控件,也叫樹(shù)控件,主要用于層級(jí)顯示和控制,應(yīng)用廣泛。我一直很想學(xué)習(xí)這個(gè)控件的使用,但每次都沒(méi)有學(xué)成,總感覺(jué)很難。前幾天有空,狠下心來(lái)將論壇搜索一遍,發(fā)現(xiàn)也不是太難,在很短時(shí)間內(nèi)只要方法得當(dāng),很快可以掌握,因?yàn)槲沂遣锁B(niǎo),所以用菜鳥(niǎo)的方法和大家交流,可能大家學(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ù)填充到樹(shù)控件中。
為什么要先學(xué)習(xí)直接用代碼將數(shù)據(jù)填充到樹(shù)控件中?因?yàn)檫@種方法是最簡(jiǎn)單的,代碼也最容易理解,學(xué)習(xí)樹(shù)控件,先將這個(gè)學(xué)會(huì),已經(jīng)掌握了一半,所以先不要急著想怎么將表中的數(shù)據(jù)填充到樹(shù)控件中,在第一小時(shí)里,樹(shù)控件和表完全沒(méi)有關(guān)系。
目的:我們要在樹(shù)控件中建立如下的一個(gè)3層級(jí)關(guān)系 水果
|
|__蘋(píng)果
| |__紅富士
| |__國(guó)光
|
|__葡萄
|__紅提子
|__青提子 解釋?zhuān)核?種,一種是蘋(píng)果,一種是葡萄,蘋(píng)果又包含2種,一種是紅富士,一種是國(guó)光,葡萄也如此。
在這里:“爺”是水果,“父”是蘋(píng)果,葡萄,“子”是紅富士,國(guó)光,紅提子,青提子。概括如下:
爺(只能有一個(gè)):水果
父(這里有2個(gè)):父1:蘋(píng)果;父2:葡萄
子(這里有4個(gè)):子1:紅富士(父1蘋(píng)果的子);子2:國(guó)光(父1蘋(píng)果的子);子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)用的,如果你想在樹(shù)控件中顯示圖標(biāo)的,這個(gè)圖標(biāo)都將儲(chǔ)存在ImageList控件中。 2、設(shè)置這兩個(gè)控件的屬性
首先要講清楚控件的屬性設(shè)置有2種,一種是設(shè)置這個(gè)控件在ACCESS中的屬性,比如名稱(chēng)等。一種是設(shè)置這個(gè)控件本身的屬性。要設(shè)置這個(gè)控件在access中的屬性,選中控件后按鼠標(biāo)右鍵選“屬性”就可以了。跟我們平時(shí)設(shè)置文本框什么的一樣。要設(shè)置這個(gè)控件本身的屬性,只要雙擊這個(gè)控件就可以了。
1)設(shè)置Treeview控件在access中的名稱(chēng)屬性,將名稱(chēng)設(shè)置為“Treeview"
2)設(shè)置Imagelist控件在access中的名稱(chēng)屬性,將名稱(chēng)設(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è)置樹(shù)控件的顯示格式,你自己慢慢研究。這里我們將第一項(xiàng)“Style"選7,在第五項(xiàng)“Imagelist"選項(xiàng)中將我們放置的Imagelist控件“Image"選上。這項(xiàng)設(shè)置就將圖標(biāo)和樹(shù)控件聯(lián)系了起來(lái)。 3、寫(xiě)代碼將數(shù)據(jù)填充到樹(shù)控件中
代碼寫(xiě)在哪里?我們希望窗體一打開(kāi),數(shù)據(jù)就自動(dòng)填充在樹(shù)控件中,所以這個(gè)代碼就寫(xiě)在窗體的加載事件中,代碼及解釋如下: Private Sub Form_Load()
'* -----------------------------------------------------------------
'*用代碼將數(shù)據(jù)填充到樹(shù)控件中
'* -----------------------------------------------------------------
Dim Nodeindex As Node
'*------------------------------------------------------------------
'*解釋?zhuān)憾xNode
'*Node是樹(shù)控件的對(duì)象
'*每個(gè)Node都有三個(gè)東西,圖標(biāo),文本,索引值
'*圖標(biāo)和文本都是實(shí)際顯示出來(lái)的,索引值是隱含的
'*------------------------------------------------------------------
'設(shè)置最頂級(jí)的“爺”:
'* ---------------------------
Set Nodeindex = TreeView.Nodes.Add(, , "爺", "水果", "K1")
Nodeindex.Sorted = True
'*------------------------------------------------------------------
'*樹(shù)控件填充數(shù)據(jù)的方法是Nodes.Add
'*括號(hào)內(nèi)是Add方法的參數(shù)
'*在這里“爺”是索引值,“水果”是將顯示的文本,“K1”是圖標(biāo)的索引值
'*Sorted是指Node的排序,True就是指采用排序,默認(rèn)是按拼音
'*第一,二個(gè)參數(shù)是空的
'*具體的參數(shù)設(shè)置以后你可以慢慢詳細(xì)研究
'*------------------------------------------------------------------
'設(shè)置第二級(jí)“父”
'* ---------------------------
Set Nodeindex = TreeView.Nodes.Add("爺", tvwChild, "父1", "蘋(píng)果", "K1")
Nodeindex.Sorted = True
Set Nodeindex = TreeView.Nodes.Add("爺", tvwChild, "父2", "葡萄", "K1")
Nodeindex.Sorted = True
'*------------------------------------------------------------------
'*第一個(gè)參數(shù)“爺”是指這一層對(duì)應(yīng)上層“爺”的
'*tvwChild參數(shù)是規(guī)定格式,指相對(duì)來(lái)說(shuō),這一層是爺?shù)淖訉?BR>'*“父1”是索引值,因?yàn)椤案浮庇?個(gè),而索引值是唯一的,所以要編號(hào),用“父1”“父2”分開(kāi)
'*“蘋(píng)果”“葡萄”是要顯示的文本,K1是顯示圖標(biāo)的索引值
'*現(xiàn)在知道為什么在“爺”層設(shè)置時(shí),第一,第二個(gè)參數(shù)是空的,因?yàn)檫@是最頂層
'*------------------------------------------------------------------
'設(shè)置第三級(jí)“子”
'* ---------------------------
Set Nodeindex = TreeView.Nodes.Add("父1", tvwChild, "子1", "紅富士", "K1")
Nodeindex.Sorted = True
Set Nodeindex = TreeView.Nodes.Add("父1", tvwChild, "子2", "國(guó)光", "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
'*------------------------------------------------------------------
'*第一個(gè)參數(shù)“父1,2”是指這一層對(duì)應(yīng)上層“父”的,但要注意對(duì)應(yīng)的是“父1”還是“父2”
'*tvwChild參數(shù)是規(guī)定格式,指相對(duì)來(lái)說(shuō),這一層是父的子層
'*“子1”是索引值,因?yàn)椤白印庇?個(gè),而索引值是唯一的,所以要編號(hào),用“1,2,3,4”分開(kāi)
'*“紅富士”等是要顯示的文本,K1是顯示圖標(biāo)的索引值
'*------------------------------------------------------------------
End Sub
就這么多代碼,總共十幾行,就可以在樹(shù)控件中顯示數(shù)據(jù)了,很簡(jiǎn)單吧。第一小時(shí)結(jié)束。
第二小時(shí):學(xué)習(xí)怎樣將樹(shù)控件和數(shù)據(jù)庫(kù)中的數(shù)據(jù)綁起來(lái)
在第一小時(shí)里,我們學(xué)習(xí)了怎樣直接用代碼填充樹(shù)控件,但在實(shí)際使用中,這種方法的應(yīng)用性不大,只有將樹(shù)控件與數(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ù)與樹(shù)控件綁定
背景:我們想在樹(shù)控件中顯示銷(xiāo)售客戶(hù)的層級(jí)列表,這個(gè)銷(xiāo)售客戶(hù)的分層是這樣的,先按“大區(qū)”,再按“省份”,最后到“客戶(hù)”我們?cè)跀?shù)據(jù)庫(kù)中建立了三個(gè)表,字段如下:
大區(qū)表:大區(qū)ID,大區(qū)名稱(chēng)
省份表:省份ID,省份名稱(chēng),所屬大區(qū)
客戶(hù)表:客戶(hù)ID,客戶(hù)名稱(chēng),所屬省份
這三個(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)樹(shù)控件的Node圖標(biāo)是可以變化的,我們準(zhǔn)備某個(gè)項(xiàng)沒(méi)有選中時(shí)的圖標(biāo)是一個(gè)沒(méi)有打開(kāi)的文件夾,選中時(shí)是一個(gè)打開(kāi)的文件夾,以區(qū)別。
3、編寫(xiě)代碼,如下:
Private Sub Form_Load()
'* -----------------------------------------------------------------
'* 用數(shù)據(jù)庫(kù)表(查詢(xún)也一樣)中數(shù)據(jù)填充樹(shù)控件
'* -----------------------------------------------------------------
Dim Rec As New ADODB.Recordset
Dim stRecQL As String
Dim Item As Integer
Dim i As Integer
Dim nodindex As Node
'* -----------------------------------------------------------------
'* 定義各類(lèi)
'* -----------------------------------------------------------------
'設(shè)置最頂級(jí)的"爺"
'* ---------------------------
Set nodindex = TreeView.Nodes.Add(, , "爺", "銷(xiāo)售客戶(hù)", "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è)打開(kāi)的文件夾
'* -----------------------------------------------------------------
'設(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ū)名稱(chēng)"), "K1", "K2")
nodindex.Sorted = True
Rec.MoveNext
Next
Rec.Close
'* -----------------------------------------------------------------
'*第一行意思是打開(kāi)一個(gè)表去尋找數(shù)據(jù)(查詢(xún)也是可以的)
'*關(guān)鍵在與Add參數(shù)的變化
'*大家看第三個(gè)參數(shù),在第一小時(shí)里,這里是"父1",這里用Rec.Fields("大區(qū)ID")來(lái)代替"1",意思是用表的編號(hào)來(lái)代替手工編號(hào)
'*第四個(gè)參數(shù)也是一樣,直接用表中的名稱(chēng)字段來(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("省份名稱(chēng)"), "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 "客戶(hù)表", CurrentProject.Connection, adOpenKeyset, adLockOptimistic, adCmdTableDirect
For i = 0 To Rec.RecordCount - 1
Set nodindex = TreeView.Nodes.Add("子" & Rec.Fields("所屬省份"), tvwChild, "孫" & Rec.Fields("客戶(hù)ID"), Rec.Fields("客戶(hù)名稱(chēng)"), "K1", "K2")
nodindex.Sorted = True
Rec.MoveNext
Next
Rec.Close
'* -----------------------------------------------------------------
'*到此你應(yīng)該完全明白了
'* -----------------------------------------------------------------
End Sub
第二小時(shí)結(jié)束
第三小時(shí):將樹(shù)控件與窗體結(jié)合
我們做樹(shù)控件,當(dāng)然不可能單單為了顯示層級(jí)數(shù)據(jù),我們希望跟窗體結(jié)合,當(dāng)我們單擊樹(shù)控件中的某個(gè)客戶(hù)時(shí),窗體上能相應(yīng)的轉(zhuǎn)到這個(gè)客戶(hù)的資料。
目的:將樹(shù)控件與窗體結(jié)合
1、我們還是沿用第二個(gè)小時(shí)里的例子,但在建立窗體時(shí),將窗體的數(shù)據(jù)來(lái)源設(shè)為“客戶(hù)表”,并在窗體中放置好客戶(hù)表的字段。
2、寫(xiě)入如下代碼:
Private Sub Treeview_NodeClick(ByVal Node As Object)
'* -----------------------------------------------------------------
'*樹(shù)控件的鼠標(biāo)點(diǎn)擊事件為NodeClick
'* -----------------------------------------------------------------
Dim str As String
'* -----------------------------------------------------------------
'*定義一個(gè)篩選
'* -----------------------------------------------------------------
If Node.Text = "銷(xiāo)售客戶(hù)" 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è)條件也可寫(xiě)成:If Node.key = "爺" Or Node.Key Like "父*" Or Node.Key Like "子*" Then
'* -----------------------------------------------------------------
Else
str = "[客戶(hù)名稱(chēng)]='" & 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è)趣,但寫(xiě)文章卻很無(wú)聊,如果你通過(guò)這篇文章學(xué)會(huì)了樹(shù)控件的基本使用,跟個(gè)貼吧,也好讓我有點(diǎn)成就感。
請(qǐng)到源碼/作品下載附件
(責(zé)任編輯:admin)
下一篇:樹(shù)視TreeView的使用技巧
- ·注冊(cè)ActiveX控件的幾種方法
- ·在Access2003或以上版本使用RichTX32.O
- ·快速注冊(cè)DLL和OCX的方法【技巧】
- ·Access的Treeview在 MS10-036 更新后無(wú)
- ·在安全補(bǔ)丁Security Advisory 960715
- ·Access2010使用Treeview出現(xiàn)問(wèn)題的解決
- ·Access中使用TreeView 樹(shù)形控件 詳細(xì)講
- ·Access中treeview不能使用或提示沒(méi)有版
- ·The Kill-Bit FAQ: Part 3 of 3
- ·The Kill-Bit FAQ: Part 2 of 3
- ·The Kill-Bit FAQ: Part 1 of 3
- ·ACCESS EXCEL 一個(gè)增強(qiáng)Treeview 節(jié)點(diǎn)編
- ·windows 7或其它windows 64位系統(tǒng)里Tre
- ·Access Treeview 樹(shù)控件MSCOMCTL.OCX
- ·[技巧]如何導(dǎo)出Imagelist的圖標(biāo)或圖片
- ·Access中使用身份證讀卡器的技巧
- ·注冊(cè)ActiveX控件的幾種方法
- ·在Access2003或以上版本使用RichTX32.OCX R
- ·快速注冊(cè)DLL和OCX的方法【技巧】
- ·Access的Treeview在 MS10-036 更新后無(wú)法使
- ·在安全補(bǔ)丁Security Advisory 960715 更新
- ·Access2010使用Treeview出現(xiàn)問(wèn)題的解決辦法
- ·Access中使用TreeView 樹(shù)形控件 詳細(xì)講解(E
- ·Access中treeview不能使用或提示沒(méi)有版權(quán)(L
- ·The Kill-Bit FAQ: Part 3 of 3
- ·The Kill-Bit FAQ: Part 2 of 3