三小时掌握TREEVIEW控件access_第1页
三小时掌握TREEVIEW控件access_第2页
三小时掌握TREEVIEW控件access_第3页
三小时掌握TREEVIEW控件access_第4页
三小时掌握TREEVIEW控件access_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、三小时掌握treeview件treeview控件在正常access数据库使用中是很频繁的,下面这篇文章与大家分享 一下:一、详见如下:能不能掌握控件的使用,是业余向准专业进步的关键。比如treeview 控件,treeview 控件,也叫树控件,主要用于层级显示和控制,应用广泛。我一直很想学习这 个控件的使用,但每次都没有学成,总感觉很难。前几天有空,狠下心来将论坛搜索一遍, 发现也不是太难,在很短时间内只要方法得当,很快可以掌握,因为我是菜鸟,所以用菜鸟 的方法和大家交流,可能大家学得更快一点,只要你用心,三个小时一定可以掌握。请大家 一定要自己动手做,只有做才能理解,光看帮助和说明是没有用

2、的。热身:理解层级概念,层级理论上可以有无限级,一般用到四,五级也够用了。最上级的只能有一个,我们把它叫做“爷”,接下来是“父”,再是“子”,再是“孙”,接下来是“曾 孙”,汇总如下:“爷,父,子,孙,曾孙”,这里是5级关系,除了“爷”只能有一个 外,其余可以有无限个。记住这些,下面要用。第一小时:学习直接用代码将数据填充到树控件中。为什么要先学习直接用代码将数据填充到树控件中?因为这种方法是最简单的,代码也最容易理解,学习树控件,先将这个学会,已经掌握了一半,所以先不要急着想怎么将表中的数据填充到树控件中,在第一小时里,树控件和表完全没有关系。目的:我们要在树控件中建立如下的一个 3层级关系

3、水果i1_苹果| 红富士i l_国光ii葡萄|_红提子i青提子解释:水果包含2种,一种是苹果,一种是葡萄,苹果又包含2种,一种是红富士,一种是国光,葡萄也如此。在这里:“爷”是水果,“父”是苹果,葡萄,“子”是红富士,国光,红提子,青提子。概括如下:爷(只能有一个):水果父(这里有2个):父1 :苹果;父2 :葡萄子(这里有4个):子1:红富士(父1苹果的子);子2:国光(父1苹果的子);子3:红 提子(父2葡萄的子);子4:青提子(父2葡萄的子)下面我们在access中栽下这棵树,步骤如下:1、新建一个窗体,在窗体上放置两个控件,一个是treeview,一个是imagelist如何找到这两个

4、控件?treeview控件在“工具箱”的榔头加扳手图标(其他控件)中选“microsoft treeviewcontrol,version 6.0" ; imagelist控件在“工具箱”的榔头加扳手图标(其他控件)中选“ microsoft imagelist control,version 6.0"。treeview控件大家都明白干什么用的,imagelist控件是干什么用呢?原来这个控件是放 图标用的,如果你想在树控件中显示图标的,这个图标都将储存在imagelist控件中。2、设置这两个控件的属性首先要讲清楚控件的属性设置有2种,一种是设置这个控件在access中的

5、属性,比如名称等。一种是设置这个控件本身的属性。要设置这个控件在access中的属性,选中控件后按鼠标右键选“属性”就可以了。跟我们平时设置文本框什么的一样。要设置这个控件本身的属性,只要双击这个控件就可以了。1) 设置treeview控件在access中的名称属性,将名称设置为“treeview"2) 设置imagelist控件在access中的名称属性,将名称设置为“image"2)设置imagelist控件本身的属性,双击控件后,在弹出来的设置框中选“images",单击“insertpicture"按钮,在你电脑中选择你需要的图标。在“key:”

6、栏中填入“ k1 ”。其他默认设置不用改。3) 设置treeview控件本身的属性,双击控件后,在弹出来的设置框中选“ge neral”,在这个选项面版中有很多项设置,大多数是设置树控件的显示格式,你自己慢慢研究。这里我们将第一项“ style"选7,在第五项“imagelist"选项中将我们放置的 imagelist控件“ image"选 上。这项设置就将图标和树控件联系了起来。3、写代码将数据填充到树控件中代码写在哪里?我们希望窗体一打开,数据就自动填充在树控件中,所以这个代码就写在窗体的加载事件中,代码及解释如下:private sub form_load(

7、)i*'*用代码将数据填充到树控件中i*dim nodei ndex as nodei*'*解释:定义node'*node是树控件的对象'*每个node都有三个东西,图标,文本,索引值'*图标和文本都是实际显示出来的,索引值是隐含的i*'设置最顶级的“爷”:i*set node in dex = treeview.nodes.add(,"爷","水果", "k1")node in dex.sorted = truei*'*树控件填充数据的方法是nodes.add'*括号内

8、是add方法的参数'*在这里“爷”是索引值,“水果”是将显示的文本,“ k1 ”是图标的索引值'*sorted是指node的排序,true就是指采用排序,默认是按拼音'*第一,二个参数是空的 '*具体的参数设置以后你可以慢慢详细研究i*'设置第二级“父”i*set nodeindex = treeview.nodes.add(” 爷", tvwchild,"父 1","苹果", "k1")node in dex.sorted = trueset nodeindex = treeview

9、.nodes.add(” 爷", tvwchild,"父 2","葡萄", "k1")node in dex.sorted = truei*'*第一个参数“爷”是指这一层对应上层“爷”的'*tvwchild参数是规定格式,指相对来说,这一层是爷的子层'* “父1”是索引值,因为“父”有2个,而索引值是唯一的,所以要编号,用“父 1 ”“父2”分开'* “苹果” “葡萄”是要显示的文本,k1是显示图标的索引值'*现在知道为什么在“爷”层设置时,第一,第二个参数是空的,因为这是最顶层i*&

10、#39;设置第三级“子”i*set nodeindex = treeview.nodes.add(” 父 1", tvwchild,"子 1","红富士 ", "k1")node in dex.sorted = trueset node in dex = treeview.nodes.add(” 父 1", tvwchild,"子 2","国光", "k1")node in dex.sorted = trueset nodeindex = treeview

11、.nodes.add(” 父 2", tvwchild,"子 3","红提子", "k1")node in dex.sorted = trueset node in dex = treeview.nodes.add("父 2", tvwchild,"子 4","青提子", "k1") node in dex.sorted = truei*'*第一个参数“父1, 2”是指这一层对应上层“父”的,但要注意对应的是 “父1”还是“父2”'

12、;*tvwchild参数是规定格式,指相对来说,这一层是父的子层'* “子1”是索引值,因为“子”有4个,而索引值是唯一的,所以要编号,用“1, 2, 3,4”分开'* “红富士”等是要显示的文本, k1是显示图标的索引值,注意k1区分大小写。i*end sub就这么多代码,总共十几行,就可以在树控件中显示数据了,很简单吧。第一小时结束。第二小时:学习怎样将树控件和数据库中的数据绑起来在第一小时里,我们学习了怎样直接用代码填充树控件,但在实际使用中,这种方法的应用性不大,只有将树控件与数据库中的数据结合起来,才能有真正的应用。其实绑定数据库的方法和直接用代码填充是大同小异的,我

13、们要做的只是将add的参数里,原来我们手工输入的变换一下,让程序知道去数据库中找数据。目的:将数据库中的数据与树控件绑定背景:我们想在树控件中显示销售客户的层级列表,这个销售客户的分层是这样的,先按“大区”,再按“省份”,最后到“客户”我们在数据库中建立了三个表,字段如下: 大区表:大区id,大区名称 省份表:省份id,省份名称,所属大区 客户表:客户id,客户名称,所属省份这三个表互相建立了关系1、新建一个窗体,在窗体上放置两个控件,一个是treeview ,一个是 imagelist2、设置这两个控件的属性在这里和第一小时唯一的区别是我们在设置imagelist 控件时,导入了两个图标,一

14、个 key为k1,一个为k2,原来树控件的 node图标是可以变化的,我 们准备某个项没有选中时的图标是一个没有打开的文件夹, 选中时是一个打开的文件夹, 以 区别。3、编写代码,如下:private sub form_load()'* 用数据库表 (查询也一样 )中数据填充树控件dim rec as new adodb.recordsetdim strecql as stringdim item as integerdim i as integerdim nodindex as node'* 定义各类'设置最顶级的 "爷 "set nodindex

15、 = treeview.nodes.add(, , " 爷", "销售客户 ", "k1", "k2") nodindex.sorted = true'*这里的设置跟第一小时里基本是一样的'*但最后多了一个"k2"的参数,"k1 "代表的是未被选中时的图标,”k2"代表是被选中后的图标'*仔细观察一下 ,你会发现选中和没选中的图标是不一样的,一个是一个文件夹 ,一个是一个打开的文件夹'设置第二级 "父 "rec.o

16、pen " 大 区 表 ", currentproject.connection, adopenkeyset, adlockoptimistic, adcmdtabledirectfor i = 0 to rec.recordcount - 1set nodindex = treeview.nodes.add(" 爷", tvwchild, "父 " & rec.fields(" 大区 id"),rec.fields(” 大区名称 ”),"k1", "k2") nod

17、index.sorted = true rec.movenextnextrec.close'*第一行意思是打开一个表去寻找数据(查询也是可以的 )'*关键在与 add 参数的变化'*大家看第三个参数,在第一小时里,这里是”父1",这里用rec.fields(”大区id")来代替"1",意思 是用表的编号来代替手工编号'*第四个参数也是一样 ,直接用表中的名称字段来取代原来我们手工的命名'设置第三级 "子 "rec.open " 省 份 表 ", currentproject.

18、connection, adopenkeyset, adlockoptimistic, adcmdtabledirectfor i = 0 to rec.recordcount - 1set nodindex = treeview.nodes.add(” 父” & rec.fields(” 所属大区 ”),tvwchild,"子”& rec.fields("省份 id"), rec.fields("省份名称"),"k1", "k2") nodindex.sorted = true rec.

19、movenextnextrec.close'*不用再解释了吧'*要注意的是,定义第一个参数的时候,不是用”父"& rec.fields("大区id"),而是用”父” &rec.fields("所属大区")'*这个意思是 :用省份表中关联大区表的字段,而不是直接用大区表的id'设置第四级 "孙 "rec.open " 客 户 表 ", currentproject.connection, adopenkeyset, adlockoptimistic, adcm

20、dtabledirectfor i = 0 to rec.recordcount - 1set nodindex = treeview.nodes.add("子"& rec.fields("所属省份 ”),tvwchild,"孙"& rec.fields("客户 id"), rec.fields("客户名称"),"k1", "k2")nodindex.sorted = truerec.movenextnextrec.close'*到此你应该完

21、全明白了end sub第二小时结束第三小时:将树控件与窗体结合我们做树控件, 当然不可能单单为了显示层级数据, 我们希望跟窗体结合, 当我们单击树控 件中的某个客户时,窗体上能相应的转到这个客户的资料。 目的:将树控件与窗体结合1、我们还是沿用第二个小时里的例子, 但在建立窗体时, 将窗体的数据来源设为 “客户表”, 并在窗体中放置好客户表的字段。2、写入如下代码:private sub treeview_nodeclick(byval node as object)i*'* 树控件的鼠标点击事件为 nodeclicki*dim str as stringi*'*定义一个筛选i

22、*if node.text = " 销售客户 " or node.key like " 父*" or node.key like " 子*" then str = ""i*'*在第一小时里 ,我们说了 node 有三个东西 ,图标,文本,索引值'*文本就是text,索引值就是key'这里将就是说当我们点击 "爷","父"或"子"层的时候 ,不筛选窗体 '*这个条件也可写成 :if node.key = " 爷&qu

23、ot; or node.key like " 父*" or node.key like " 子*" then i*elsestr = " 客户名称 ='" & node.text & "'"end ifme.form.filteron = true me.form.filter = str '*按指定的条件进行窗体筛选 end sub 明白了吧,所谓结合窗体,实际不过是进行窗体筛选而已。第三小时结束(5 分钟也够了,哈哈)treeview 概述treeview 控件显示 no

24、de 对象的分层列表,每个 node 对象均由一个标签和一个可选的位图组成。 treeview 一般用于显示文档标题、索引入口、磁盘上的文件和目录、或能被有效地分层显示的其它种类信息。创建了treeview控件之后,可以通过设置属性与调用方法对各 node 对象进行操作,这些操作包括添加、删除、对齐和其它操作。可 以编程展开与折回 node 对象来显示或隐藏所有子节点。 collapse 、expand 和 nodeclick 三个事件也提供编程功能。 node 对象使用 root 、 parent 、 child 、 firstsibling 、next 、 previous 和 lasts

25、ibling 属性。在代码中可通过检索对 node 对象的引用,从而在树上定位。也可以使用键盘定位。 up arrow 键和 down arrow 键向下循环穿过所 有展开的 node 对象。从左到右、从上到下地选择 node 对象。若在树的底部,选择便跳回树的顶部,必要时滚动窗 口。 right arrow 键和 left arrow 键也穿过所有展开的 node 对象,但是如果选择了未展开的 node 之后再 按 right arrow 键,该 node 便展开;第二次按该键,选择将移向下一个node 。相反,若扩展的 node 有焦点,这时再按 left arrow 键,该 node 便

26、折回。如果按下 ansi 字符集 中的键,焦点将跳转至以那个字母开头的最 近的 node 。后续的按该键的动作将使选择向下循环,穿过以那个字母开头的所有展开节点。控件的外观有八种可用的替换样式,它们是文本、位图、直线和 +/- 号的组合, node 对象可以任一种组合出现。treeview 控件使用由 imagelist 属性指定的 imagelist 控件,来存储显示于 node 对象的位图和图标。任何时 刻, treeview 控件只能使用一个 imagelist 。这意味着, 当 treeview 控件的 style 属性被设置成显示图象的样式时, treeview 控件中每一项的旁边都

27、有一个同样大小的图象。trs发行注意 treeview 控件是 comctl32.ocx 文件中的一组 activex 控件的一部分。为了在应用程序中使用 eeview 控件,必须将 comctl32.ocx 文件添加到工程中。在发行应用程序时,要在用户的 microsoft windows ystem 或 system32 目录中安装 comctl32.ocx 文件。属性drophighlight 属性( listview, treeview 控件),indentation 属性,labeledit 属性,linestyle 属性,nodes 属性,pathseparator 属性( tre

28、eview 控件),selecteditem 属性( activex 控件),sorted 属性( treeview 控件),style 属性( treeview 控件),checkboxes 属性,fullrowselect 属性,scroll 属性,singlesel 属性,hottracking 属性,tabindex 属性,tag 属性,visible 属性,dragicon 属性,dragmode 属性,causesvalidation 属性,mouseicon 属性,tabstop 属性,helpcontextid 属性,name 属性,parent 属性,container 属性

29、,tooltiptext 属性,whatsthishelpid 属性,oledragmode 属性( activex 控件),oledropmode 属性( activex 控件),height , width 属性( activex 控件),index 属性( activex 控件),left, top 属性( activex 控件),object 属性( activex 控件),appearance 属性( activex 控件),borderstyle 属性(activex 控件),enable 属性(activex 控件),font 属性(activex 控件),hideselecti

30、on 属性(activex 控件), hwnd 属性(activex 控件),mousepointer 属性(activex 控件),imagelist 属性(activex 控件)。方法getvisiblecou nt方法,hittest 方法(listview, treeview 控件),startlabeledit 方法,setfocus 方法,drag方法,move方法,zorder 方法,showwhatsthis 方法,oledrag 方法(activex 控件),refresh 方法(activex 控件)。常用属性1、nodes属性返回对 treeview 控件的node对象的

31、集合的引用。语法:object.nodes? ject所在处代表一个对象表达式,其值是应用于”列表中的一个对象。说明:可以使用标准的集合方法(例如:add和remove方法)操作node对象。可以按其索引或存储在key属性中的唯一键来访问集合中的每个元素。2、 style属性返回或设置图形类型(图象、文本、+/-号、直线)以及出现在treeview 控件中每一 node对象上的文本的类型。语法:object.style = nu mberstyle语法包含下面部分:部分描述object对象表达式,其值是应用于"列表中的一个对象。n umber指定图形类型的整数,请参阅设置值"

32、;中的描述。设置值nu mber 的设置值是:设置值描述0仅为文本。1图象和文本。2+/-号和文本。3+/-号,图象和文本。4直线和文本。5直线,图象和文本。6直线,+/-号和文本。7(缺省)直线,+/-号,图象和文本。说明:若style属性设置为包含直线的值,则lin estyle属性就确定了直线的外观。如果style属性设置为不含直线的值,则lin estyle属性将被忽略。3、sorted属性返回或设置一值,此值确定 node对象的子节点是否按字母顺序排列;返回或设置一值,此值确定treeview控件的根层节点是否按字母顺序排列。语法: object.sorted = boolea ns

33、orted属性语法包含下面部分:部分描述object对象表达式,其值是应用于"列表中的一个对象。boolea n布尔表达式,表示node对象是否已被排序如 设置值"中描述。boolean的设置值是:设置值描述truenode对象根据它们的text属性按字母顺序排列。其text属性由数字开始的node对象也作为字符串排序,第一个数字确定在排序中的初始位置,后面的数 字确定以后的排序。falsenode对象不排序。说明:sorted属性有两种用法,第一,在treeview 控件的根(顶)层排列 node对象,第二,对任何单个node对象的立即子节点排序。例如,下面的代码是对tr

34、eeview控件的根节点排序:treeview1.sorted = true 顶层 node 对象被排序。下面的例子表示创建node对象时如何设置sorted属性:dim nodx as nodeset nodx = treeview1.nodes.add(,”"parentnode")no dx.sorted = true设置sorted属性为true仅对当前nodes集合排序。在treeview控件中添加新的node对象时,必须再次设置sorted属性为true,以便对添加的node对象排列。常用方法1、 add 方法在 treeview 控件的 nodes集合中添加一

35、个 node对象。语法:object.add(relative, relationship, key, text, image, selectedimage)add方法的语法包含下面部分:部分描述object必需的。对象表达式,其值是应用于"列表中的一个对象relative可选的。已存在的node对象的索引号或键值。新节点与已存在的节点间的关系,可在下一个参数relationship中找到。relati on ship可选的。指定的 node对象的相对位置,如设置值中所述。key可选的。唯一的字符串,可用于用item方法检索 node。text必需的。在 node中出现的字符串。im

36、age可选的。在关联的imagelist控件中的图象的索引。selectedimage可选的。在关联的imagelist控件中的图象的索引,在node被选中时显示。设置值relatio nship的设置值是:常数值描述tvwfirst0首的节点。该node和在relative中被命名的节点位于同一层,并位于所有冋层节点之前。tvwlast1最后的节点。该 node和在relative中被命名的节点位于同一层, 并位于所有冋层节点之后。任何连续地添加的节点可能位于最后添 加的节点之后tvwnext2(缺省)下一个节点。该node位于在relative中被命名的节点之后。tvwprevious3前

37、一个节点。该 node位于在relative中被命名的节点之前。tvwchild4(缺省)子节点。该node成为在relative中被命名的节点的子节点。注意:如果在relative中没有被命名的 node对象,则新节点被放在节点顶层的最后位置。说明:nodes集合是一个基于1的集合。在添加node对象时,它被指派一个索引号,该索引号被存储在node对象的index属性中。这个最新成员的index属性值就是 node集合的count属性的值。因为 add方法返回对新建立的node对象的引用,所以使用这个引用来设置新node的属性十分方便。2、getvisiblecount方法返回固定在tree

38、view 控件的内部区域的node对象的个数。语法:object.getvisiblecou ntobject所在处代表一个对象表达式,其值是应用于”列表中的一个对象。说明:node对象的个数取决于在一个窗口中能固定多少行。总的行数取决于控件的高度和font对象的size属性。该计数包括列表底部的只能看到一局部的项。可以使用getvisiblecou nt属性确保可视的最小行数,这样可以精确地访问一个层。如果最小行数是不可视的,可以用height属性重新设置 treeview的大小。常用事件nodeclick事件在一个 node 对象被单击时,这个事件便发生。语法:private sub object_nodeclick(byval no de as node)nodeclick 事件的语法包含下面部分: 部分 描述 object 对象表达式,其值是 “应用于 ”列表中的一个对象。 node 对被点取的 node 对象的引用。说明:在单击节点对象之外的 treeview 控件的任何部位,标准的 click 事件发生。当单击某个特定的 node 对象时, nodeclick 事件发生; nodeclick 事件也

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论