快速掌握TREEVIEW控件

        理解层级概念,层级理论上可以有无限级,一般用到四,五级也够用了。最上级的只能有一个,我们把它叫做,接下来是,再是,再是,接下来是曾孙”......,汇总如下:爷,父,子,孙,曾孙,这里是5级关系,除了只能有一个外,其余可以有无限个。记住这些,下面要用。 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


           
第一小时:学习直接用代码将数据填充到树控件中。
           
为什么要先学习直接用代码将数据填充到树控件中?因为这种方法是最简单的,代码也最容易理解,学习树控件,先将这个学会,已经掌握了一半,所以先不要急着想怎么将表中的数据填充到树控件中,在第一小时里,树控件和表完全没有关系。
           
目的:我们要在树控件中建立如下的一个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:”栏中填入“K<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />1”。其他默认设置不用改。
            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
            '*------------------------------------------------------------------
            '*
第一个参数12”是指这一层对应上层的,但要注意对应的是1”还是2”
            '*tvwChild参数是规定格式,指相对来说,这一层是父的子层
            '*“
1”是索引值,因为4个,而索引值是唯一的,所以要编号,用“1234”分开
            '*“
红富士等是要显示的文本,K1是显示图标的索引值
            '*------------------------------------------------------------------
            End Sub
           
就这么多代码,总共十几行,就可以在树控件中显示数据了,很简单吧。第一小时结束。
           
第二小时:学习怎样将树控件和数据库中的数据绑起来
           
在第一小时里,我们学习了怎样直接用代码填充树控件,但在实际使用中,这种方法的应用性不大,只有将树控件与数据库中的数据结合起来,才能有真正的应用。其实绑定数据库的方法和直接用代码填充是大同小异的,我们要做的只是将Add的参数里,原来我们手工输入的变换一下,让程序知道去数据库中找数据。

            目的:将数据库中的数据与树控件绑定
           
背景:我们想在树控件中显示销售客户的层级列表,这个销售客户的分层是这样的,先按大区,再按省份,最后到客户我们在数据库中建立了三个表,字段如下:
           
大区表:大区ID,大区名称
           
省份表:省份ID,省份名称,所属大区
           
客户表:客户ID,客户名称,所属省份
           
这三个表互相建立了关系
            1
、新建一个窗体,在窗体上放置两个控件,一个是Treeview,一个是Imagelist
            2
、设置这两个控件的属性在这里和第一小时唯一的区别是我们在Imagelist控件的设置时,导入了两个图标,一个KEYK1,一个为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分钟也够了,哈哈)

 

 

示例下载

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章