三小时掌握TREEVIEW控件
能不能掌握控件的使用,是业余向准专业进步的关键。虽然我本人不太喜欢用控件,因为基于不同的操作环境成品后效果很难保证。但有些成熟控件,会使用还是能提高软件水平。比如TREEVIEW控件,TREEVIEW控件,也叫树控件,主要用于层级显示和控制,应用广泛。我一直很想学习这个控件的使用,但每次都没有学成,总感觉很难。前几天有空,狠下心来将论坛搜索一遍,发现也不是太难,在很短时间内只要方法得当,很快可以掌握,因为我是菜鸟,所以用菜鸟的方法和大家交流,可能大家学得更快一点,只要你用心,三个小时一定可以掌握。请大家一定要自己动手做,只有做才能理解,光看帮助和说明是没有用的。 热身: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分钟也够了,哈哈)
学习很有乐趣,但写文章却很无聊,如果你通过这篇文章学会了树控件的基本使用,跟个贴吧,也好让我有点成就感。
ASP编码教程:如何实现/使用缓存
[ASP]2015年4月15日ASP编码教程:asp缓存的分类
[ASP]2015年4月15日ASP编码教程:何谓ASP缓存/为什么要缓存
[ASP]2015年4月15日ASP编码教程:asp实现的sha1加密解密代码
[ASP]2015年4月15日ASP编码教程:asp执行带参数的sql语句实例
[ASP]2015年4月14日