TreeView
【其他】
■TreeView控件可以以树型方式来组织项目,不仅显示直观、界面友好,而且项目的管理和操作更为方便,是当前比较流行的一个控件。
该控件的特点是在较小的空间可以分层次显示大量的数据,并且可以按照用户的要求检索数据。该控件具有以下功能:
通过可以展开或者折叠的节点遍历数据。
图形化和文本化的节点显示。
拖放操作。
包括剪切、复制和粘贴的节点操作。
■典型编程
通常TreeView控件用来让用户选择数据,或者进行数据的管理。比如,在一个人事管理软件中,使用部门、姓和名这样的三层结构查找数据就比较容易,而且可以通过拖拉来进行人事单位的变动。
首先,在窗口打开时创建该控件。下面的脚本向TreeView控件中首先添加最高级别的项目:
TreeViewItem ltvi_item
ltvi_item.children = True
ltvi_item.SelectedPictureIndex = 1
ltvi_item.Label = "餐饮部"
ltvi_item.Data = "餐饮部"
ltvi_item.PictureIndex = 1
Tv_1.InsertItemLast(0,ltvi_item)
ltvi_item.Label = "接待部"
ltvi_item.Date = "接待部"
ltvi_item.PictureIndex = 2
Tv_1.InsertItemLast(0,ltvi_item)
上面的脚本添加所有一级项目,可以反复使用上面的脚本,直到添加完所有的一级项目。因为这些一级项目在程序运行之前就可以确定,所以可以直接添加。对于数据可能要发生变动的,应该从数据库中提取数据,通过循环来添加项目。
下面的脚本在用户开始拖动时判断选中项目是否允许拖动。在部门、姓和名三层结构中,只允许拖动最低一层的数据。所以,在BeginDrag事件中编写如下脚本:
TreeViewItem ltvi_source
If ltvi_source <> 2 Then //判断用户选中的是否是职工,只能拖动职工
This.Drag(Cancel!)
Else
//保存被拖动项目和其父项目,语句省略
End If
当用户在可以接收拖动数据的项目上时,应该高亮显示该项目,以给用户一定的操作暗示信息。首先判断当前鼠标所在的项目是否可以接收拖动的数据,如果可以接收则高亮显示该项目。在DragWithin事件中编写如下脚本:
TreeViewItem ltvi_over
If GetItem(handle,ltvi_over) = -1 Then
SetDropHightLight(0)
Return 0
End If
当用户在可以接收拖动数据的项目上释放鼠标时,应该对项目进行一定的处理。通常要删除源数据,并且在释放的目标项目中添加该数据。
【属性】
**TreeView属性
▲Visible
布尔类型,表示该控件是否可见。该属性的缺省值为True。
▲Enabled
布尔类型,表示控件是否可用。该属性的缺省值为True。
▲EditLabels
布尔类型,表示用户是否可以编辑控件中项目的标签。缺省值为False,不允许用户编辑标签。
▲HasButtons