Access交流网
  • 设为首页|收藏本站|繁体中文|手机版
  •     
  • Access培训-Access开发平台-Access行业开发

  • 首页
  • 资讯
  • 技巧
  • 源码
  • 行业
  • 资源
  • 活动
  • 关于

技巧

ACCESS数据库

启动/设置/选项/背景

修复/压缩

安全/加密/解密

快捷键

版本升级/其它等

数据表

命名方式/设计规范

表设计

查询

Sql语言基础

选择查询

更新查询

删除查询

追加查询

生成表查询

交叉表查询

SQL特定查询

查询参数

查询综合应用

界面/窗体/控件

标签

文本框

命令按钮

组合框/列表框

选项组/复选框/选项按钮

选项卡

子窗体

窗体本身/综合应用

其它

报表打印

报表设计

高级报表

模块/函数/VBA/API/系统

VBA基础

内置函数

调试/跟踪/Debug

模块/类模块

API/COM/系统相关

字符数字日期

网络通信游戏

加密解密安全

文件处理

经典算法

宏/菜单/工具栏/功能区

宏/脚本

菜单/工具栏

功能区/Ribbon

图表/图形/图像/多媒体

图表

图形/图像

音频

视频/动画

DAO/链接表/ADO/ADP

DAO/链接表/ODBC

ADO/RDO

ADP

ActiveX/第三方控件/插件

Treeview树控件

ListView列表控件

Toolbar工具栏控件

微软其它控件

Dbi-Tech

CodeJock

Grid++Report

FastReport

ComponentOne

加载项/插件/Addin

OFFICE集成/导入导出/交互

Excel导入导出/交互

Word导入导出/交互

PPT交互

Outlook控制/邮件

Text文本文件/INI/CSV

PDF/SWF/XML格式

CAD格式

Sharepoint/其它Office

SqlServer/其它数据库

表

视图

存储过程/触发器

函数

用户/权限/安全

调试/维护

SqlServer其它/综合

发布/打包/文档/帮助

开发版/运行时

打包/发布/部署

开发文档/帮助制作

Access完整行业系统

采购管理系统

销售管理系统

仓库管理系统

人力资源管理HRM

CRM管理系统

MRP/ERP管理系统

BRP/流程优化

其它管理系统

心得/经验/绝招
其它/杂项
Excel技巧

Excel应用与操作

Excel开发编程

Word技巧

Word应用与操作

Word开发编程

Outlook技巧

Outlook应用与操作

Outlook开发编程

热门文章

  • 求助。在窗体中怎样通过绑定..
  • 在 Access 中避免用..
  • Access删除多条记录并..
  • 窗体插入GIF图片
  • 在ACCESS中扩展条件格..
  • 获取access程序的启动..

最新文章

  • Access动态修改子窗体..
  • 窗体属性 弹出方式、模式和..
  • Access实现任意文本框..
  • Access引用是变量的控..
  • Access添加图片删除图..
  • Access子窗体控件绑定..

联系方式

Access交流网(免费Access交流)

QQ:18449932 

网  址:www.access-cn.com

当前位置:首页 > 技巧 > 界面/窗体/控件
界面/窗体/控件

treeview使用方法介绍

建立一个窗体,在窗体上放置如下控件:

Treeview 控件:名称 Treeview1;

  Imagelist 控件:名称 Imagelist1,并在该控件中放置三张个性图片(32×32),建立索引1、2、3;(方法:在Imagelist 控件上单击鼠标右键选择属性)

  Label 控件:名称分别为Lab(0)、Lab(1),Caption分别为“父节点:”、“子节点:”;

  Textbox 控件:名称分别为Txt(0)、Txt(1),text都为“”;

  commandbutton 控件:名称为系统默认,Caption分别为“添加”、“展开”、“收起”、“排序”、“删除”、“退出”;

  将下列代码加入到代码框:

Option Explicit 

Dim I As Integer
Dim J As Integer
Dim nodx As Node
Dim CunZai As Boolean '定义变量


Private Sub Command1_Click()
 If Txt(0).Text <> "" And Txt(1).Text <> "" Then '不允许建立零字节的父节点和子节点
  CunZai = False
  J = TreeView1.Nodes.Count
  For I = 1 To TreeView1.Nodes.Count '检查新输入的父节点名称是否存在
   If TreeView1.SelectedItem.Children > 0 Then
    If Txt(0).Text = TreeView1.Nodes(I).Text Then CunZai = True
    End If
  Next I
  If CunZai = True Then '若存在, 则在父节点下建立子节点 
   Set nodx = TreeView1.Nodes.Add(Txt(0).Text, tvwChild, "child" & J, 
               Txt(1).Text, 3)
  Else ,若不存在,则建立父节点和子节点
   Set nodx = TreeView1.Nodes.Add(, , Txt(0).Text, Txt(0).Text, 1)
   Set nodx = TreeView1.Nodes.Add(Txt(0).Text, tvwChild, "child" & J,_
          Txt(1).Text, 3)
  End If
  TreeView1.Refresh
 ElseIf Txt(0).Text = "" Then MsgBox "请输入父节点名称!", vbInformation, "警告!" 
  '系统提示
 ElseIf Txt(1).Text = "" Then MsgBox "请输入子节点名称!", vbInformation, "警告!"
 End If
End Sub

Private Sub Command2_Click()
 For I = 1 To TreeView1.Nodes.Count
  TreeView1.Nodes(I).Expanded = True '展开所有节点
 Next I
End Sub

Private Sub Command3_Click()
 For I = 1 To TreeView1.Nodes.Count
  TreeView1.Nodes(I).Expanded = False '收起所有节点
 Next I
End Sub

Private Sub Command4_Click()
 TreeView1.Sorted = True '排列顺序
End Sub

Private Sub Command5_Click()
 If TreeView1.SelectedItem.Index <> 1 Then
  TreeView1.Nodes.Remove TreeView1.SelectedItem.Index '删除选定的节点
 End If
End Sub

Private Sub Command6_Click()
 End '退出程序 
End Sub

Private Sub Form_Load()
 TreeView1.LineStyle =TvwTreeLines '在兄弟节点和父节点之间显示线 
 TreeView1.ImageList = ImageList1 '链接图像列
 TreeView1.Style = tvwTreelinesPlusMinusPictureText 
 '树状外观包含全部元素
 Set nodx = TreeView1.Nodes.Add(, , "蒲子明", "蒲子明", 1) 
 '建立名称为"蒲子明"的父节点,选择索引为1的图像 
 Set nodx = TreeView1.Nodes.Add("蒲子明", tvwChild, "child01", "收件箱", 3) 
 '在"蒲子明"父节点下建立"收件箱"子节点,选择索引为3的图像
 Set nodx = TreeView1.Nodes.Add("蒲子明", tvwChild, "child02", "发件箱", 3)
 '在"蒲子明"父节点下建立"发件箱"子节点,选择索引为3的图像
 CunZai = False
End Sub

Private Sub TreeView1_Expand(ByVal Node As MSComctlLib.Node)
 Node.ExpandedImage = 2 '节点被展开时,选择索引为2的图像
End Sub

Private Sub TreeView1_NodeClick(ByVal Node As MSComctlLib.Node) 
 If TreeView1.SelectedItem.Children = 0 Then '检查是否有子节点,0为无
  For I = 1 To TreeView1.Nodes.Count
  If TreeView1.Nodes(I).Selected Then
   MsgBox "您选择的是:“" & TreeView1.Nodes(I).FullPath & "”子节点!" 
    '系统提示
  End If
  Next I
 End If 
End Sub


图片如下:
按此在新窗口浏览图片

关于treeview控件的研究心得

1、 关于checked属性
checked属性就是在每个列项前面出现一个方框可以通过打勾来表明是否选中。其使用语法是:

Node.Checked As Boolean

或者
TreeView.Nodes.Checked As Boolean

如果你在控件工具箱找不到treeview控件,那么请点击“工具”菜单下的“附件控件”。这里要特别强调的一点是,treeview控件一共有2个版本,请选择6.0版。否则没有checked属性
如果要打开checked属性,可以在代码中加一行TreeView1.CheckBoxes = True。或者直接在treeview属性窗中修改checked属性为true。否则看不到方框。
如果你要根据某个node的checked值改变另一些node的checked值,比如选取一次父节点就自动选取全部子节点的checked,那么你应在TreeView_NodeCheck事件中放置代码,而不是TreeView_NodeClick。如果在TreeView_NodeClick写,同样可以实现,但是你必须在改变checked方框后再次点击node以便再一次引发NodeClick事件,这样才能看到刷新后的情况。而在NodeCheck中就完全没有问题。
2、 关于读取node信息
获取node信息的参数有很多,包括:
index、key、text
这里我个人认为用index和text就足够了,key虽然看起来是一个为了循环考虑的量,可以供item方法使用,但是请注意,key是一个字符串,而不是整数!我想不出来我有什么必要设定一个命名规则然后再不厌其烦地把字符串转化为整数。而index属性正好可以帮我们解决这个困难。首先解释一下,不论一个treeview里的node分了多少级的深度,index都是从最上往最下游历树,返回所有node的总数。也许有人会说那我怎么知道在进入某一级后如何依靠index而不是key来循环?很简单,我们还有几个工具配合index:
Node.Children As Integer
   返回当前node的子节点的数目
   Node.Parent As Node
   返回当前节点的父节点信息
   强烈提醒注意的是,Children是一个数值,可以直接进入循环,而Parent是一个对象,直接引用Node.Parent得到的是上一层节点的key。只有用Node.Parent.Index才能获得上一层节点的index值。全部的node数量可以用TreeView.Nodes.Count属性获得。初始第一个node的index值是1而不是0!习惯了数组下标用0开始的要注意。
    
下面这段代码是我基于上面两方面的经验写出来的,目的在于当一个父节点的checked被确定时,其下所有子节点都自动被修改为与父节点一致。

Private Sub TreeView1_NodeCheck(ByVal Node As MSComctlLib.Node)
a = Node.Index
b = Node.Checked
If a = 1 Then ‘如果是第一个节点那么游历整个树
  For i = 0 To TreeView1.Nodes.Count - 1
     TreeView1.Nodes(i + a).Checked = b
  Next i
Else
  For i = 1 To Node.Children’否则游历当前节点所有下属节点
     TreeView1.Nodes(i + a).Checked = b
  Next i
End If
End Sub


有人可能要问,为什么要区别当前节点是否是根节点?原因是节点与节点之间之有父与子两层关系,无法直接获取孙以及更低层节点信息。而index的序列又是不区分节点深度的。因此,如果不判断当前节点是否是根节点,只要任何一个子节点下有一个孙节点,这段代码就无法达到足够的循环次数,从而无法覆盖全部任何深度的节点。比如根节点下有2个子节点,每个子节点有2个孙节点,那么不加判断的循环结果就是程序运行到第一个子节点下的第一个孙节点就结束——因为Node.Children告诉我们只有2个子节点,循环的时候第一个子节点算一个,按照index的顺序,其下的第一个孙节点就是第2个,循环从而结束。

发布人:cg1-张老三之家  
分享到:
点击次数:  更新时间:2008-11-06 16:37:59  【打印此页】  【关闭】
上一条:VB VBA 中感叹号(!)与(.)句号的区别  下一条:Access与Flash的结合应用(祥解)附源码



相关文章

  • • Access动态修改子窗体的默认值
  • • 窗体属性 弹出方式、模式和代码acDialog模式的区别
  • • Access实现任意文本框的字符插入
  • • Access引用是变量的控件
  • • Access添加图片删除图片和更改图片
  • • Access子窗体控件绑定其他Access对象
  • • Access子窗体页面上下翻动
  • • 根据当前屏幕分辨率自动设置Access主窗体大小及居中显示

热门文章

  • [2003-12-13] 父子窗体引用的语法总结(二)access数据库
  • [2003-12-20] 如何自动“播放”数据库记录?access数据库
  • [2016-11-10] 微软没有教你的Access技巧-改变控件的默认属性access数据库
  • [2016-12-02] Access子窗体入门:Access子窗体多种视图access数据库
  • [2005-04-27] 在 Access 中利用生日计算年龄access数据库
  • [2009-05-04] 分享:3小时学会树控件access数据库

热门产品

公司动态|在线留言|在线反馈|友情链接|会员中心|站内搜索|网站地图

Access交流网 版权所有 1999-2018 粤ICP备10043721号

QQ:18449932

Access应用 Access培训 Access开发 Access平台

access|数据库|access下载|access教程|access视频|access软件

Powered by MetInfo 5.3.12 ©2008-2023  www.metinfo.cn