Skip to content

TreeView 类

TreeView 是以树形组织的 Node 对象的层次显示。每个节点可以展开或折叠,可选具有复选框,并引用关联 ImageList 中的图标。节点集合通过 Nodes 访问;每个 Node 拥有自己的同级、父级和子级导航属性。

vb
Private Sub Form_Load()
    Set TreeView1.ImageList = ImageList1
    TreeView1.Style = tvwTreelinesPlusMinusPictureText

    Dim root As Node
    Set root = TreeView1.Nodes.Add(, , "root", "My Computer", "computer")
    TreeView1.Nodes.Add root, tvwChild, "c", "C: drive", "disk"
    TreeView1.Nodes.Add root, tvwChild, "d", "D: drive", "disk"
    root.Expanded = True
End Sub

Private Sub TreeView1_NodeClick(ByVal Node As Node)
    Debug.Print "Clicked: " & Node.FullPath
End Sub

控件从 BaseControlFocusable 继承可聚焦矩形可停靠成员 --- 大小、位置、AnchorsDockFontAppearanceMousePointer / MouseIconToolTipTextDragMode / DragIconDragRefreshSetFocusTabIndex / TabStopZOrderCausesValidationVisualStyleshWndHelpContextID / WhatsThisHelpID

Style:按钮/线条/图标/文本的组合

Style 是此控件最常点击的属性。它是一个单一枚举值,但八个选项编码了3位组合,表示哪些视觉元素出现:

Style按钮线条图标
tvwTextOnly---------
tvwPictureText------
tvwPlusMinusText------
tvwPlusMinusPictureText---
tvwTreelinesText------
tvwTreelinesPictureText---
tvwTreelinesPlusMinusText---
tvwTreelinesPlusMinusPictureText(默认)

这些值在内部解码为Win32 TVS_HASBUTTONS / TVS_HASLINES 样式位。

排序

排序在两个层级配置:

  • TreeView 整体在 SortedTrue 时对其根级节点排序,使用 SortOrderSortType 控制方向和比较方式。
  • 每个单独的 Node 拥有自己的 Sorted / SortOrder / SortType 属性,独立于树级设置控制子节点的排序。

切换任一标志会立即触发排序。在节点已排序后添加的新节点会插入到正确的排序位置。

图像列表和图像引用

通过 ImageList 绑定一个 ImageList。每个 Node 通过 Image(节点未选中时渲染)和 SelectedImage(节点选中时渲染)引用图标;两者接受基于1的 Long 索引或绑定图像列表的 String 键。省略 SelectedImage 时,选中图标默认与 Image 相同。

复选框

CheckBoxes 设为 True 为每个节点添加前导复选框。用户可以点击复选框或在节点聚焦时按 Space 切换;然后触发 NodeCheck 事件。Node.Checked 以编程方式读写选中状态。

属性

Appearance

控件边框的绘制方式。AppearanceConstants 的成员。默认:vbAppear3d。继承。

BorderStyle

控件的边框样式。TreeBorderStyleConstants 的成员:ccNoneccFixedSingle。默认:ccFixedSingle

CheckBoxes

每个节点是否具有前导复选框。Boolean。默认:False

DropHighlight

当前作为拖放目标高亮的 Node,或 NothingNode,读/写。

FullRowSelect

点击行的缩进区域是否选中该节点(而不是仅点击其图标或标签)。Boolean。默认:False

HideSelection

控件没有焦点时是否隐藏选择高亮。Boolean。默认:True

HotTracking

鼠标悬停时节点是否高亮。Boolean。默认:False

hWnd

树视图窗口的Win32句柄。LongPtr,只读。

hWndLabelEdit

当前编辑标签的文本框窗口的Win32句柄,或 0LongPtr,只读。

ImageList

用于节点图标的 ImageList。赋值会递增 ImageList 的绑定计数。

Indentation

每个节点深度级别的水平像素缩进。Double,读/写。默认:20

LabelEdit

内联标签编辑如何触发。TreeLabelEditConstants 的成员:tvwAutomatictvwManualtvwDisabled。默认:tvwAutomatic

LineStyle

树线是从根节点绘制还是仅从子节点绘制。TreeLineStyleConstants 的成员:tvwTreeLinestvwRootLines。默认:tvwRootLines

Nodes

Nodes 集合。只读。

PathSeparator

Node.FullPath 中插入到节点文本之间的字符串。String。默认:"\"

Scroll

树视图在其内容超出可见区域时是否具有滚动条。Boolean。默认:True

SelectedItem

当前选中的 Node,或 Nothing。读/写。

SingleSel

是否任何时候只能展开单个节点(任何其他展开会自动折叠同级子树)。Boolean。默认:False

Sorted

根级节点是否排序。Boolean。默认:False。每棵子树的排序通过各个节点的 Node.Sorted 控制。

SortOrder

根级的排序方向。TreeSortOrderConstants 的成员。默认:tvwAscending

SortType

根级排序使用的字符串比较。TreeSortTypeConstants 的成员:tvwBinary(区分大小写)或 tvwText(不区分大小写)。默认:tvwText

Style

组合视觉样式 --- 参见上方 Style 表格TreeStyleConstants 的成员。默认:tvwTreelinesPlusMinusPictureText

WheelScrollEvent

鼠标滚轮事件是否触发 ScrollBoolean。默认:True

方法

GetVisibleCount

返回当前视口可以显示的完全可见节点的最大数量。Long

语法:object.GetVisibleCount As Long

HitTest

返回给定位置的 Node,如果该位置下没有节点则返回 Nothing。适用于拖放悬停效果、自定义上下文菜单和右键处理。

语法:object.HitTestx, yAs Node

x
控件坐标系中的 Single 水平坐标(默认为缇)。
y
Single 垂直坐标。

StartLabelEdit

在当前选中的节点上打开内联编辑器。当 LabelEdittvwManual 时使用。

语法:object.StartLabelEdit

事件

AfterLabelEdit

内联标签编辑完成时触发。将 Cancel 设为 True 以恢复更改。

语法:object_AfterLabelEditCancel As BooleanNewString As String

BeforeCollapse

节点折叠之前触发。将 Cancel 设为 True 以阻止折叠。

语法:object_BeforeCollapseByVal Node As NodeByRef Cancel As Boolean

BeforeExpand

节点展开之前触发。将 Cancel 设为 True 以阻止展开。

语法:object_BeforeExpandByVal Node As NodeByRef Cancel As Boolean

BeforeLabelEdit

内联标签编辑即将开始时触发。将 Cancel 设为 True 以阻止编辑。

语法:object_BeforeLabelEditCancel As Boolean

Click

在控件内鼠标点击时触发。与 NodeClick 不同,后者仅在点击命中节点时触发。

语法:object_Click( )

Collapse

节点折叠后触发。

语法:object_CollapseByVal Node As Node

DblClick

在控件内双击时触发。

语法:object_DblClick( )

DragDrop, DragOver

继承的拖放事件。

Expand

节点展开后触发。

语法:object_ExpandByVal Node As Node

Initialize

控件窗口创建后触发。

KeyDown, KeyPress, KeyUp

继承的键盘事件。CheckBoxesTrue 时按 Space 切换聚焦节点的选中状态并触发 NodeCheck

MouseDown, MouseMove, MouseUp

继承的鼠标事件。

NodeCheck

当节点的复选框被切换时触发 --- 无论是用户点击、Space 按键,还是代码赋值 Node.Checked

语法:object_NodeCheckByVal Node As Node

NodeClick

当节点被点击时触发。与 Click 不同,后者在控件内任何鼠标点击时触发无论位置。

语法:object_NodeClickByVal Node As Node

NodeSelect

当节点成为选中节点时触发 --- 无论是用户点击、键盘方向键导航,还是代码赋值 SelectedItem

语法:object_NodeSelectByVal Node As Node

OLECompleteDrag, OLEDragDrop, OLEDragOver, OLEGiveFeedback, OLESetData, OLEStartDrag

继承的OLE拖放事件。

Scroll

当树视图滚动时触发。此twinBASIC实现新增;原始VB6控件未暴露此事件。将 WheelScrollEvent 设为 False 以抑制鼠标滚轮输入时的触发。

语法:object_Scroll( )

Validate

继承的验证事件。

另见

twinBASIC及其LOGO版权为作者"韦恩"所有