TabStrip 控件

TabStrip 控件就象笔记本的书签或者一组文件夹的标签一样。通过使用 TabStrip 控件，可以在应用程序中为某个窗口或者对话框的相同区域定义多个页面。

语法

TabStrip

说明

该控件由 Tabs 集合中的一个或者更多个 Tab 对象组成。在设计时和运行时，都可以通过设置该控件的属性影响 Tab 对象外观。也可以在设计时用 TabStrip 控件的属性页来添加或删除选项卡，要是在运行时用方法来添加或删除 Tab 对象。

Style 属性决定了 TabStrip 控件看起来是象下压按钮还是象笔记本标签 。在设计时将一个 TabStrip 控件放在某个窗体上时，它就有了一个笔记本标签。如果 Style 属性被设置为 tabTabs，那么 TabStrip 控件的内部区域周围将有一个边框。当 Style 属性被设置为 tabButtons 时，控件的内部区域周围不显示边框，不过，那个区域仍然存在。

要设置 TabStrip 控件的整体大小，用其拖动句柄或者设置其 Top、Left、Height 和 Width 属性。运行时根据该控件的整体大小，Visual Basic 自动决定内部区域的大小和位置并返回 Client-coordinate 属性— ClientLeft、ClientTop、ClientHeight 和 ClientWidth。MultiRow 属性决定了该控件能否具有多于一行的选项卡，TabWidthStyle 属性决定了每一行的外观，还有，如果 TabWidthStyle 属性被设置为 tabFixed，则可以用 TabFixedHeight 和 TabFixedWidth 属性来给 TabStrip 控件中的所有选项卡设置相同的高度和宽度。

TabStrip 控件不是容器。要想包含实际页面和它们的对象，必须用 Frame 控件或者其它容器，它们的大小必须与控件中所有 Tab 对象共享的内部区域匹配。如果针对该容器使用了一个控件数组，则可以使特定的 Tab 对象与数组中的每一项相关联，请看下例：

Option Explicit

Private mintCurFrame As Integer' Current Frame visible

Private Sub Tabstrip1_Click()

If Tabstrip1.SelectedItem.Index = mintCurFrame _

Then Exit Sub ' No need to change frame.

' Otherwise, hide old frame, show new.

Frame1(Tabstrip1.SelectedItem.Index).Visible = True

Frame1(mintCurFrame).Visible = False

' Set mintCurFrame to new value.

mintCurFrame = Tabstrip1.SelectedItem.Index

End Sub

注意   在容器上将控件分组时,必须使用上述显示/隐藏策略,而不使用 Zorder Method 将框架带到全面来。否则，实现访问键(ALT + 访问键)的控件将一直响应键盘命令，甚至当容器不是最顶端的控件时也如此。还要注意，必须将每个组放在它自己的容器中，以此将 OptionButton 控件的组分离开，否则，窗体上的所有 OptionButtons 将象一大组 OptionButtons。

提示   使用 BorderStyle 属性为 None 的 Frame 控件作为容器来取代 PictureBox 控件。Frame 控件比起 PictureBox 控件来说所花费的开销少。

TabStrip 控件的 Tabs 属性是所有 Tab 对象的集合。每个 Tab 对象都具有与其当前状态和外观相关联的属性。例如，可以使 ImageList 控件与 TabStrip 控件相关联，然后就可以在单个选项卡上使用图象了。也可以使工具提示与每个 Tab 对象相关联。

发行注意   TabStrip 控件是一组自定义控件的一部分，这组自定义控件可以在文件 COMCTL32.OCX 中找到。为了在应用程序中使用 TabStrip 控件，必须将文件 COMCTL32.OCX 添加到工程中去。当发布应用程序时，要把文件 COMCTL32.OCX 安装到用户的 Microsoft Windows SYSTEM 目录下。关于如何在工程中添加自定义控件的详细信息，请参阅《程序员指南》。


Tab 对象

一个 Tab 对象代表某个 TabStrip 控件的 Tabs 集合中的单个选项卡。

说明

对于每一个 Tab 对象来说，可以用不同属性来规定其外观，还可以用 Selected 属性来规定其状态。

在设计时，可以用 TabStrip 控件的属性页里的“选项卡”选项卡上的“插入选项卡”和“删除选项卡”按钮来插入和删除选项卡，并用文本框来规定 Tab 对象的这些属性中：Caption、Image、ToolTipText、Tag、Index 和 Key。在运行时也可以指定这些属性。

Caption 属性规定选项卡的标题，而 Image 属性在选项卡上放置一个图标。这两个属性可以单独使用，也可以一起使用。

•	若使用 Caption 属性，在 TabStrip 控件的属性页里的“选项卡”选项卡上的“标题”文本框内，键入要在运行时出现在选项卡或者按钮上的文本。

•	若使用 Image 属性，将 ImageList 控件放在窗体上并用 ListImage 对象来填充 ListImages 集合，其中的每个对象都有一个索引号和一个可选键（可加可不加）。在 TabStrip 控件的属性页里的“通用”选项卡上，选择那个 ImageList 控件，使它与 TabStrip 控件相关联。在“选项卡”选项卡上的“图象”文本框内，键入应该出现在 Tab 对象上的 ListImage 对象的索引号或者键。

ToolTipText 属性是为了当游标停在选项卡上时，能暂时在运行时在一个小矩形框内显示一个文本字符串。为了在设计时设置 ToolTipText 属性，在“通用”选项卡上选择“ShowTips”复选框，然后在“选项卡”选项卡上的“ToolTipText”文本框内，键入工具提示字符串。

为了返回对用户已经选定的 Tab 对象的引用，使用 SelectedItem 属性；为了确定指定的是否被选中，使用 Selected 属性。通常，这些属性连同 BeforeClick 事件，用来校验或记录与当前选定的选项卡相关的数据，这种校验或记录数据的操作，发生在显示用户选定的下一个选项卡之前。

每个 Tab 对象也有只读属性：Left、Top、Height 和 Width，可用这些属性来调用在 Tabs 集合中的单个 Tab 对象。


Tabs 集合

Tabs 集合含有 Tab 对象集合。

语法

tabstrip.Tabs(index)

tabstrip.Tabs.Item(index)

Tabs 集合的语法有这些部分：

部分	描述
tabstrip	对象表达式，其值是一个 TabStrip 控件。
index	整数或者字符串，它唯一标识了对象集合的一个成员。整数是要求的 Tab 对象的 Index 属性值；字符串是要求的 Tab 对象的 Key 属性值。
在设计时，使用 TabStrip 控件的属性页里的“选项卡”选项卡上的“插入选项卡”和“删除选项卡”按钮在 Tabs 集合中添加和删除 Tab 对象。

Tabs 集合用 Count 属性来返回该集合中的选项卡数目。为了操作 Tabs 集合中的 Tab 对象，在运行时使用下面几种方法：

•	Add —把 Tab 对象添加到 TabStrip 控件中。

•	Item —从集合中检索用 Key 或者 Index 来标识的 Tab。

•	Clear —从集合中删除所有 Tab 对象。

•	Remove —从集合中删除用 Key 或者 Index 标识的 Tab。


TabStrip 控件常数

Tab 样式常数

常数	值	描述
tabTabs	0	Tabs 作为笔记本标签的形式出现，内部区域周围有三维边框。
TabButtons	1	Tabs 作为下压按钮的形式出现，内部区域周围没有边框。
Tab Width 样式常数

常数	值	描述
tabJustified	0	每个选项卡的宽度都足以容纳其内容，并且还会根据需要增加，这样每一行选项卡都横跨该控件的宽度。如果这个选项卡仅有一行，这种形式就没有什么意义了。
tabNonJustified	1	每个选项卡的宽度刚好能容纳其内容。行与行没有对齐，所以多行的选项卡看上去会参差不齐。
tabFixed	2	所有选项卡的高度和宽度都是相同的，并且是由 TabFixedHeight 和 TabFixedWidth 属性设置的。


Add 方法（Tabs 集合）

将 Tab 对象添加到 TabStrip 控件里的 Tabs 集合中。

语法

object.Add(index, key, caption, image)

Add 方法的语法有这些部分：

部分	描述
object	对象表达式，其值是一个 Tabs 集合。
index	可选的。一个整数，它指定了要插入 Tab 的位置。如果未指定索引，那么这个 Tab 添加到该 Tabs 集合的末尾。
key	可选的。用以标识 Tab 的唯一字符串。用 key 来检索指定的选项卡。这等同于把新的 Tab 对象添加到 Tabs 集合中之后，设置该对象的 Key 属性。
caption	可选的。出现在 Tab 上的字符串。这等同于把新的 Tab 对象添加到 Tabs 集合中之后，设置该对象的 Caption 属性。
image	可选的。在相关联的 ImageList 控件内的图象索引。这幅图象在选项卡上显示。这等同于把新的 Tab 对象添加到 Tabs 集合中之后，设置该对象的 Image 属性。
说明

若在设计时要将选项卡添加到 TabStrip 控件中，单击 TabStrip 控件的属性页里的“选项卡”选项卡上的“插入选项卡”按钮，然后填充到新的选项卡的合适区域。

若在运行时要将选项卡添加到 TabStrip 控件中，用 Add 方法，它将返回对新插入的 Tab 对象的引用。例如，下面代码添加一个选项卡，它的 caption 是“Howdy!”，它的 key 是“MyTab”，用作第二个选项卡（它的 index 是 2）：

Set X = TabStrip1.Tabs.Add(2,"MyTab","Howdy!")


Add 方法（Tabs 集合）示例

本例将三个 Tab 对象添加到 TabStrip 控件，每个 Tab 都带有标题和来自于某个 ImageList 控件的图象。要试用此例，将 ImageList 控件和 TabStrip 控件放在窗体上。ImageList 控件为 Tab 对象提供图象，因此要将三幅图象添加到 ImageList 控件中。把下面的代码粘贴到 Form 对象的 Load 事件中，并运行该程序。

Private Sub Form_Load()

Dim X As Integer

Set TabStrip1.ImageList = ImageList1

TabStrip1.Tabs(1).Caption = "Time"

TabStrip1.Tabs.Add 2, , "Date"

TabStrip1.Tabs.Add 3, , "Mail"

For X = 1 To TabStrip1.Tabs.Count

TabStrip1.Tabs(X).Image = X

Next X

End Sub


BeforeClick 事件

产生于单击 TabStrip 控件中的 Tab 对象时，或产生于 Tab 对象的 Selected 设置值已经改变时。

语法

Private Sub object_BeforeClick(cancel As Integer)

BeforeClick 事件的语法有这些部分：

部分	描述
object	对象表达式，其值是一个 TabStrip 控件。
cancel	整数，其值为 0 (False) 和 -1 (True)。初始值为 0。
说明

在发生选定新的 Tab 对象的 Click 事件前，用 BeforeClick 事件的 Tab 对象信息。将 cancel 参数设置为 True 会取消新的选择。

注意   将 cancel 参数设置为 True 防止焦点切换到另一个选项卡，却不能阻止 Click 事件的发生。

注意   如果在 BeforeClick 事件过程中使用了 MsgBox 和 InputBox 函数，那么 TabStrip 控件将不接收 Click 事件，不管 cancel 参数的设置如何。


BeforeClick 事件示例

本示例用 BeforeClick 事件来演示怎样防止用户切换到另一个选项卡。这常用于在显示新选定的选项卡之前校验当前标记上的信息。

要试用此例，将 TabStrip 控件和双元素的 Frame 控件数组放到窗体上（设置 BorderStyle 属性为 None）。在第一个 Frame 控件中，添加 CheckBox 控件，而在第二个 Frame 控件中添加 TextBox 控件。把下面的代码粘贴到 Form 对象的 Load 事件中，并运行该程序。在选定/撤消标为“检查”的选项卡上的复选框之后，单击标为“文本”的选项卡。

Private Sub Form_Load()

Dim i As Integer

Dim Tabx As Object

'设置第一个选项卡的标题为“检查”。

TabStrip1.Tabs(1).Caption = "Check"

'添加以“文本”为标题的第二个选项卡。

Set Tabx = TabStrip1.Tabs.Add(2, , "Text")

'标记复选框。

Check1.Caption = "Cancel tab switch"

'使框架跟 Tabstrip 控件的内部区域对齐。

For i = 0 To 1

Frame1(i).Left = TabStrip1.ClientLeft

Frame1(i).Top = TabStrip1.ClientTop

Frame1(i).Height = TabStrip1.ClientHeight

Frame1(i).Width = TabStrip1.ClientWidth

Next

'把第一个选项卡的框架容器放在顶端。

Frame1(0).ZOrder 0

End Sub

'用 BeforeClick 事件校认复选框的值，决定是否继续进行 Click

'事件。

Private Sub TabStrip1_BeforeClick(Cancel As Integer)

If TabStrip1.Tabs(1).Selected Then

If Check1.Value = 1 Then Cancel = True

End If

End Sub

Private Sub TabStrip1_Click()

Frame1(TabStrip1.SelectedItem.Index-1).ZOrder 0

End Sub


Caption 属性（Tab 对象）

返回或者设置出现在 TabStrip 控件内的 Tab 对象的选项卡上或者按钮上的标题。

语法

object.Caption [= string]

Caption 属性的语法有这些部分：

部分	描述
object	对象表达式，其值是一个 Tab 对象。
string	字符串表达式，其值是作为标题显示的文本。
说明

在设计时或者在运行时，都可以为 TabStrip 控件内的 Tab 对象设置 Caption 属性。

•	设计时— 在 TabStrip 控件的属性页里的“选项卡”选项卡上，在“标题”文本框内键入标题字符串。

•	运行时— 象下面这样设置标题：

TabStrip1.Tabs(1).Caption = "First Tab"

   或者

TabStrip1.Tabs.Add 2, , "Second Tab"


Caption 属性（Tab 对象）示例

本例为添加到 TabStrip 控件中的三个 Tab 对象中的每一个设置 Caption 属性。标题字符串分别是“时间”、“日期”和“邮件”。每个 Tab 对象还显示一幅来自于 ImageList 控件的图象。要试用此例，将 ImageList 控件和 TabStrip 控件放到一个窗体上。将三个样板位图放入 ImageList 控件。这个 ImageList 控件为 Tab 对象提供图象。将下面的代码粘贴到 Form 对象的 Load 事件中，并运行该程序。

Private Sub Form_Load()

Dim X As Integer

'使 TabStrip 控件跟一个 ImageList 控件关联。

Set TabStrip1.ImageList = ImageList1

'设置标题。

TabStrip1.Tabs(1).Caption = "Time"

TabStrip1.Tabs.Add 2, , "Date"

TabStrip1.Tabs.Add 3, , "Mail"

For X = 1 To TabStrip1.Tabs.Count

'使选项卡跟图象关联。

TabStrip1.Tabs(X).Image = X

Next X

End Sub


ClientHeight、ClientWidth、ClientLeft 和 ClientTop 属性

返回 TabStrip 控件的内部区域（显示区域）的坐标。在运行时是只读的；在设计时是不可用的。

语法

object.ClientHeight

object.ClientWidth

object.ClientLeft

object.ClientTop

其中，object 为对象表达式，其值是一个 TabStrip 控件。

说明

在运行时，Clientn-coordinate 属性（ClientLeft、ClientTop、ClientHeight 和 ClientWidth）自动存储 TabStrip 控件内部区域的坐标，这个内部区域是被该控件中所有 Tab 对象所共享的。于是当一个指定的 Tab 对象被选定时，跟这个对象相关联的控件就出现了，这些控件都放在一个容器内，比如 Frame 控件，这个容器的大小和位置都和 clientn-coordinate 属性相符。为了让一个 Tab 对象跟一个容器（以及其控件）相关联，需要创建控件数组，比如 Frame 控件数组。

所有 clientn-coordinate 属性都使用父窗体的刻度模式。在内部区域内放置一个 Frame 控件，使它们的大小和位置完全匹配，请用下面的代码：

Frame1.Left = TabStrip1.ClientLeft

Frame1.Top = TabStrip1.ClientTop

Frame1.Width = TabStrip1.ClientWidth

Frame1.Height = TabStrip1.ClientHeight

为了在新的选项卡被选中时让该选项卡及其相关容器出现在最上面一层，要求：

•	将在 TabStrip 控件内部区域中的容器的大小和位置设置为 clientn-coordinate 属性；

•	使用 ZOrder 方法将选定的选项卡的容器控件放在 z 顺序的最前面或者最后面。


ClientHeight、ClientWidth、ClientLeft 和 ClientTop 属性示例

下面的例子演示了使用 Client-coordinate 属性（ClientLeft、ClientTop、ClientWidth 和 ClientHeight）和 Frame 控件数组来显示选项卡，也就是切换选项卡时在 TabStrip 控件内部区域的指定对象。下面的例子用 ZOrder 方法来显示 Frame 控件及其包含的对象。

要试用此例，将 TabStrip 控件和三元素 Frame 控件数组放在窗体上。在一个 Frame 控件内放置 CheckBox 控件，在另一个控件内放置 CommandButton 控件，而在第三个控件内放置 TextBox 控件。将下面的代码粘贴到 Form 对象的 Load 事件中，并运行该程序。单击不同的选项卡来选择它们以及它们的内容。

Private Sub Form_Load()

Dim Tabx As Object

Dim i As Integer

'设置第一个选项卡的标题为“检查”。

TabStrip1.Tabs(1).Caption = "Check"

'添加以“命令”为标题的第二个选项卡。

Set Tabx = TabStrip1.Tabs.Add(2, , "Command")

'添加以“文本”为标题的第三个选项卡。

Set Tabx = TabStrip1.Tabs.Add(3, , "Text")

'使 TabStrip 控件的内部区域和框架容器对齐。

For i = 0 To 2

With TabStrip1

      	Frame1(i).Move .ClientLeft, .ClientTop, _

         	.ClientWidth, .ClientHeight

   	End With

Next

'启动时将第一个选项卡的图片框容器放在顶层。

Frame1(0).ZOrder 0

End Sub

Private Sub TabStrip1_Click()

Frame1(TabStrip1.SelectedItem.Index - 1).ZOrder 0

End Sub


MultiRow 属性

返回或者设置一个值，指明 TabStrip 控件能否显示多于一行的选项卡。

语法

object.MultiRow [= boolean]

MultiRow 属性的语法有这些部分：

部分	描述
object	对象表达式，其值是一个 TabStrip 控件。
Boolean	布尔表达式，它指定控件是否具有多于一行的选项卡，请看下面的设置值。
设置值

boolean 的设置值是：

设置	描述
True	允许多行选项卡。
False	只允许单行选项卡。
说明

行数是根据选项卡的宽度和数目自动设置的。在调整控件大小时行数是可以更改的------这将保证标签能换到下一行。如果 MultiRow 被设置为 False，并且最后的选项卡超出了控件的宽度，一个水平的旋转控件就被添加到 TabStrip 控件的右端。

在设计时，在 TabStrip 控件的属性页内的“通用”选项卡上设置 MultiRow 属性。在运行时，可用代码来设置 MultiRow 属性，例如：

'在 TabStrip 控件中允许多行的选项卡。

TabStrip1.MultiRow = TRUE


Style 属性（TabStrip 控件）

返回或者设置 TabStrip 控件的外观，是选项卡样式还是按钮样式。

语法

object.Style [= value]

Style 属性的语法有这些部分：

部分	描述
object	对象表达式，其值是一个 TabStrip 控件。
value	常数或者整数，它决定了标记对话框的外观，请看下面的设置值。
设置值

value 的设置值为：

常数	值	描述
tabTabs	0	（缺省）标签。这种选项卡以笔记本标签样式出现，内部区域周围有三维边框。
tabButtons	1	按钮。这种选项卡以一般的下压按钮样式出现，内部区域周围没有边框。
说明

在设计时，从 TabStrip 控件的属性页的“通用”标签上的“样式”列表中，选择 Style 属性，是选项卡样式，还是按钮样式。

在运行时，用如下的代码来设置 Style 属性：

'将 Style 属性设置为标签样式。

TabStrip1.Style = tabTabs

'将 Style 属性设置为按钮样式：

TabStrip1.Style = tabButtons


Tabs 属性（TabStrip 控件）

返回对 TabStrip 控件中 Tab 对象的集合的引用。

语法

object.Tabs(index)

Tabs 属性的语法有这些部分：

部分	描述
object	对象表达式，其值是一个 TabStrip 控件。
Index	标识 Tabs 集合中的 Tab 对象的值。它可能是所要求的 Tab 对象的 Index 属性，也可能是所要求的 Tab 对象的 Key 属性。
说明

Tabs 集合可以用标准的集合方法访问，例如 Item 方法。


TabFixedHeight 和 TabFixedWidth 属性

返回或者设置 TabStrip 控件中所有 Tab 对象为固定的高度和宽度，这仅在 TabWidthStyle 属性被设置为 tabFixed 时才用。

语法

object.TabFixedHeight [= integer]

object.TabFixedWidth [= integer]

TabFixedHeight 和 TabFixedWidth 属性的语法有这些部分：

部分	描述
object	对象表达式，其值是一个 TabStrip 控件。
Integer	以像素、或缇为单位的 TabStrip 控件的高度或宽度的，integer 所使用的标尺决定于容器的 ScaleMode。
说明

TabFixedHeight 属性适用于 TabStrip 控件中的所有 Tab 对象。其缺省值或者等于在 Font 属性中指定的字体高度，或者等于 Image 属性中指定的 ListImage 对象高度，就取两者中更高的那个，再加上边框的宽度。如果 TabWidthStyle 属性被设置为 tabFixed，同时也设置了 TabFixedWidth 的属性值的话，那么不管是否在控件中添加还是删除 Tab 对象，每个 Tab 对象的宽度都是相同的。


TabWidthStyle 属性

返回或者设置一个值，该值决定了 TabStrip 控件中的所有 Tab 对象的对齐方式或者宽度。

语法

object.TabWidthStyle [=value]

TabWidthStyle 属性的语法有这些部分：

部分	描述
object	对象表达式，其值是一个 TabStrip 控件。
value	整数或者常数，它决定了选项卡是对齐的还是设置为一个固定的宽度，请看下面的“设置值”。
设置值

value 的设置值为：

常数	值	描述
tabJustified	0	（缺省）对齐方式。如果 MultiRow 属性被设置为 True，那么每个选项卡的宽度都足以容纳其内容，而且每个选项卡的宽度都会根据需要而增加，从而使得每行选项卡都等于控件的宽度。如果 MultiRow 属性被设置为 False，或者如果仅为单行选项卡，该设置就没有什么意义。
tabNonJustified	1	非对齐方式。每个选项卡的宽度都刚好容纳其内容。因为各行没有对齐，所以多行的选项卡看起来参差不齐。
tabFixed	2	固定的。所有选项卡都有同样的宽度，该宽度由 TabFixedWidth 属性决定的。
说明

在设计时，可以在 TabStrip 控件的属性页的“通用”选项卡上设置 TabWidthStyle 属性。在运行时，TabWidthStyle 属性的设置会影响每个 Tab 对象出现时的宽度。

运行时，可以象下面所述的那样设置 TabWidthStyle 属性：

'在一行中将所有的选项卡对齐以适应控件的宽度。

TabStrip1.MultiRow = True

TabStrip1.TabWidthStyle = tabJustified

'创建参差不齐的选项卡行。

TabStrip1.MultiRow = True

TabStrip1.TabWidthStyle = tabNonJustified

'设置所有的选项卡为同样的宽度。

TabStrip1.TabFixedWidth = 500

TabStrip1.TabWidthStyle = tabFixed


Change 事件（工具栏，滑块控件）

指示控件的内容已经改变。事件怎样或何时发生，则随控件的不同而不同。

语法

Private Sub object_Change([index As Integer])

Change 事件的语法包含下面部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的一个对象。
Index	整数，它唯一地标识控件数组中的一个控件。
说明

•	滑块─通过代码或者移动控件的滑块使得 Value 属性变化时，该事件即引发。

•	工具栏─在最终用户使用自定义工具栏对话框，对工具栏控件的工具栏进行了自定义之后，该事件即引发。

Change 事件过程能使控件之间数据显示相互同步或协调。例如：可以用滑块控件的 Change 事件过程，对 TextBox 控件中滑块控件的 Value 属性设置值进行更新。或者，可以用 Change 事件过程在一个工作区显示数据和公式，而在另一个工作区显示其结果。

注意   Change 事件过程有时能产生层叠事件。当控件的 Change 事件在决定控件值的代码中设置了属性，如，给文本框控件设置了 Text 属性，而使控件内容改变时，则层叠事件就会产生。为了防止层叠事件的发生：

•	对于要改变自己内容的控件，应尽量避免使用 Change 事件过程。如果已使用了这样的过程，则务必设一标志，以防止当前进行中的变化产生进一步的改变。

•	应避免创建两个或更多个这样的控件：它们的 Change 事件过程相互影响，例如，两个这样的文本框控件：在它们的 Change 事件期间要进行相互更新。


Windows 公用控件的可捕获错误

以下各表列出 ComCtl32.OCX 和 ComCt232.OCX 文件中 Windows 公用控件的可捕获错误和常数。

下表列出 ComCtl32.OCX 文件中 Windows 公用控件的错误。此文件中的控件有：TabStrip、 Toolbar、 StatusBar、ProgressBar、TreeView、 ListView、 ImageList 和 Slider。

常数	值	描述
ccInvalidProcedureCAll	5	过程调用无效
ccOutofMemory	7	内存溢出
		此操作不能分配足够内存。
ccTypeMismatch	13	类型不匹配
		有一个参数与数据类型不符。
ccInvalidPropertyValue	380	无效的属性值
		已进行属性的赋值，其值超出允许范围。
ccSetNotSupportedAtRuntime	382	运行时不能设置属性
ccSetNotSupported	383	属性为只读
ccSetNotPermitted	387	此控件不能设置属性
ccGetNotSupported	394	属性为只写
ccInvalidClipboardFormat	460	无效的剪贴板格式
ccInvalidObjectUse	425	无效的对象用法
ccDataObjectLocked	672	在 OLEStartDrag 事件以外不可清除或扩展 DataObject 格式列表
ccExpectedAnArgument	673	至少应有一个参数
ccRecursiveOleDrag	674	非法的 OLE 拖放的递归调用
ccIndexOutOfBounds	35600	索引越界
ccElemNotFound	35601	元素未找到
ccNonUniqueKey	35602	键在集合中不唯一
ccInvalidKey	35603	无效键
ccCol1MustBeLeftAligned	35604	当 ListView 控件的 View 属性设置为 3（报表），最左边的列（第 1 列）只能左对齐，对齐方式设置为其它值都会导致此错误。
ccElemNotPartOfCollection	35605	此项的控件已删除
ccCollectionChangedDuringEnum	35606	控件的集合已修改
ccMissingRequiredArg	35607	缺少需要的参数
ccBadObjectReference	35610	无效的对象
ccReadOnlyIfHasImages	35611	如果图象列表中有图象，其属性为只读
ccImageListMustBeInitialized	35613	ImageList 使用前必须初始化
ccWouldIntroduceCycle	35614	这样将引入一个循环
ccNotSameSize	35615	列表中所有图象大小必须相同
ccMaxPanelsExceeded	35616	超出最大的窗格
ccImageListLocked	35617	ImageList 有另一控件与其绑定时不能修改
ccMaxButtonsExceeded	35619	超出最大的按钮
ccCircularReference	35700	不允许循环的对象引用
下表列出 ComCt232.OCX 文件中 Windows 公用控件的错误。此文件中的控件有：UpDown 和 Animation。

常数	值	描述
cc2InvalidProcedureCall	5	无效的过程调用
cc2BadFileNameOrNumber	52	错误的文件名或编号
cc2FileNotFound	53	文件找不到
cc2InvalidPropertyValue	380	无效的属性值
cc2SetNotSupportedAtRuntime	382	运行时不能设置属性
cc2SetNotSupported	383	属性为只读
cc2InvalidObjectUse	425	无效的对象用法
cc2InvalidClipboardFormat	460	无效的剪贴板格式
cc2DataObjectLocked	672	在 OLEStartDrag 事件以外不可清除或扩展 DataObject 格式列表
cc2ExpectedAnArgument	673	至少应有一个参数。
cc2InconsistentObject	35750	控件的内部状态杂乱
cc2ErrorDuringSet	35751	无法设置属性
cc2ErrorOpeningVideo	35752	无法打开 AVI 文件
cc2ErrorPlayingVideo	35753	无法播放 AVI 文件
cc2NoValidBuddyCtl	35754	必须先设置 BuddyControl 的属性
cc2VideoNotOpen	35755	必须先打开 AVI 文件
cc2AutoBuddyNotSet	35756	AutoBuddy 未设置，找不到潜在的伙伴控件
cc2ErrorStoppingVideo	35757	试图停止正播放的视频文件错误
cc2ErrorClosingVideo	35758	关闭已打开的视频文件错误
cc2CantStopAutoPlay	35759	Stop 方法对 AutoPlay 不起作用
cc2BuddyNotASibling	35760	在同一容器里 BuddyControl 必须是一个独立控件
cc2NoUpDownAsBuddy	35761	UpDown 控件不能与另一个 UpDown 控件成为伙伴。


错误信息（RichTextBox 控件）

下表列出 RichTx32.OCX 文件中 RichTextBox 控件的错误：

常数	值	描述
rtfInvalidProcedureCall	5	无效的过程调用
rtfOutOfMemory	7	内存溢出
rtfPathFileAccessError	75	指定的路径/文件名不能访问或无效
rtfInvalidFileFormat	321	无效的文件格式
rtfInvalidPropertyValue	380	无效的属性值
rtfInvalidPropertyArrayIndex	381	无效的属性数组索引
rtfSetNotSupported	383	属性为只读
rtfSetNotPermitted	387	不能设置属性
rtfGetNotSupported	394	属性为只写
rtfInvalidObjectUse	425	无效的对象用法
rtfDataObjectLocked	672	在 OLEStartDrag 事件以外不可清除或扩展 DataObject 格式列表
rtfExpectedAnArgument	673	至少应有一个参数
rtfInvalidCharPosition	32000	无效的字符位置
rtfInvalidHdc	32001	无效的 HDC
rtfCannotLoadFile	32002	无法加载指定文件
rtfInvalidKeyName	32005	键名无效或缺少
rtfInvalidClassName	32006	OLE 类名无效或缺少
rtfKeyNotFound	32007	键不存在
rtfOLESourceRquired	32008	缺少需要的源文档或类名
rtfNonUniqueKey	32009	键在集合中不唯一
rtfInvalidObject	32010	无效的对象
rtfProtected	32011	此操作不能对保护文本操作
rtfOleCreate	32012	无法创建对象
rtfOleServer	32013	无法启动服务器应用程序


ImageList 控件

ImageList 控件包含 ListImage 对象的集合，该集合中的每个对象都可以通过其索引或关键字被引用。ImageList 控件不能独立使用，只是作为一个便于向其它控件提供图象的资料中心。

语法

ImageList

说明

ImageList 控件可以和任何将 Picture 对象赋值给 Picture 属性的控件一起使用。例如，下面的代码把 ListImage 集合中第一个 ListImage 对象赋值给新创建的 StatusBar 面板的 Picture 属性：

Dim pnlX As Panel

Set pnlX = StatusBar1.Panels.Add() '添加一个新的 Panel 对象。

Set pnlX.Picture = ImageList1.ListImages(1).Picture '设置 Picture 属性。

注意   将图象赋值给 Picture 对象时必须使用 Set 语句。

可以给 ImageList 控件添加不同大小的图象，但 ImageList 控件要约束这些图象，使它们的大小都相同。ListImage 对象的大小是由下列因素决定的：

•	添加任何图象前 ImageWidth 和 ImageHeight 属性的设置。

•	第一幅被添加图象的大小。

虽然并没有限制任何特定的图象大小，但可以被加载的图象总数是受到可用内存数量限制的。

在设计时，可以用“ImageList 控件属性”对话框的“通用”选项卡来添加图象。在运行时，可以用 Add 方法给 ListImages 集合添加图象。

除了存储 Picture 对象外，ImageList 控件还可以在把图象赋值给其它控件前，对它们执行图形操作。例如，Overlay 方法可以从两个不同的图象出发创建一个复合图象。

另外，为了保存系统资源，可以把一个或多个 ImageList 控件与其它的 Windows 95 公共控件绑定。这些公共控件包括 ListView、 ToolBar、 TabStrip 和 TreeView 控件。为了与这些控件之一一起使用 ImageList，必须通过适当属性来使某个特定的 ImageList 与该控件关联。对于 ListView 控件来说，必须将 Icons 和 SmallIcons 属性设置为 ImageList 控件。对于 TreeView、 TabStrip 和 Toolbar 控件来说，必须将 ImageList 属性设置为 ImageList 控件。

对于这些控件来说，设计时可以用“自定义属性”对话框来指定一个 ImageList。运行时也可以指定一个 ImageList，就象下面的例子所述的那样，它可以设置 TreeView 控件的 ImageList 属性：

TreeView1.ImageList = ImageList1  '指定 ImageList 属性

一旦 ImageList 与某个控件相关联，就可以在过程中用 Index 属性或 Key 属性的值来引用 ListImage 对象了。下面的示例设置 TreeView 控件的第三个 Node 对象的 Image 属性为 ImageList 控件中的第一个 ListImage 对象：

'使用 ImageList1 的 Index 属性值。

TreeView1.Nodes(3).Image = 1

'或者使用 Key 属性值。

TreeView1.Nodes(3).Image = "image 1"   '假定 Key 值为 "image 1。"

发行注意   ImageList 控件是 ActiveX 控件组的一部分，该控件组可以在文件 COMCTL32.OCX 中找到。若是在应用程序中使用 ImageList 控件，必须把文件 COMCTL32.OCX 添加到工程中。在分行应用程序时，应把文件 COMCTL32.OCX 安装到 Microsoft Windows 的 System 目录或者 System32 目录下。关于如何把一个 ActiveX 控件添加到工程中去的详细内容，请参阅《程序员指南》。


ListImage 对象、ListImages 集合

•	ListImage 对象是任意大小的位图，可以在其他控件中使用。

•	ListImages 集合是 ListImage 对象的集合。

语法

imagelist.ListImages

imagelist.ListImages(index)

根据标准集合语法，上面的语法行分别引用集合和集合中的单个元素。

ListImage 对象和 ListImages 集合的语法包含下面部分：

部分	描述
imagelist	必需的。对象表达式，其值是“应用于”列表中的一个对象。
index	一个整数或字符串，它唯一标识了集合中的对象。整数是 Index 属性值；字符串是 Key 属性值。
说明

ListImages 是一个基于 1 的集合。

设计时，可以用“ImageList 控件属性”页里的“通用”选项卡来添加或删除 ListImage 对象，而在运行时，则用 ListImage 对象的 Add 方法。

集合中的每一项都可以通过其索引或唯一的关键字来访问。例如，为了获取对某个集合中第三个 ListImage 对象的引用，可以用下面的语法：

Dim imgX As ListImage

'用索引号来引用。

Set imgX = ImageList.ListImages(3)

'或者通过唯一的关键字来引用。

Set imgX = ImageList1.ListImages("third") '假定 Key 是 "third。"

'或者用 Item 方法。

Set imgX = ImageList1.ListImages.Item(3)

每个 ListImage 对象都有个相应的屏蔽，该屏蔽是用 MaskColor 属性自动生成的。这个屏蔽并不直接使用，而是应用在对原始位图的图形处理，比如 Overlay 和 Draw 方法中。


Add 方法（ListImages 集合）

添加 ListImage 对象到 ListImages 集合中。

语法

object.Add(index, key, picture)

Add 方法的语法包含下面部分：

部分	描述
object	必需的。对象表达式，其值是“应用于”列表中的对象。
index	可选的。一个整数，它指定了要插入 ListImage 对象的位置。如果没有指定 index，ListImage 对象将被添加到 ListImages 集合的末尾。
key	可选的。用来标识 ListImage 对象的唯一字符串。用该值检索某个特定的 ListImage 对象。如果该关键字不是唯一的，将会产生一个错误。
picture	必需的。它指定了欲添加到集合中的图片。
说明

ListImages 是一个基于 1 的集合。

可以把位图或者图标加载到 ListImage 对象中。为了加载位图或者图标，可以用 LoadPicture 函数，如下所示：

Set imgX = ImageList1.ListImages.Add(,,LoadPicture("file name"))

也可以直接将 Picture 对象加载到 ListImage 对象中。例如，下面这个示例把 PictureBox 控件的图片加载到 ListImage 对象中：

Set imgX = ImageList1.ListImages.Add(,,Picture1.Picture)

如果还没有任何 ListImage 对象添加到 ListImages 集合中，可以在添加第一个 ListImage 对象之前设置 ImageHeight 和 ImageWidth 属性。第一个添加到集合中的 ListImage 对象可以是任意大小的。然而，其后添加的所有 ListImage 对象都被强制与第一个 ListImage 对象大小相同。一旦有一个 ListImage 对象被添加到集合中，ImageHeight 和 ImageWidth 就变为只读属性，并且任何被添加到集合中的图象必须有相同的 ImageHeight 和 ImageWidth 属性值。

如果预计 Index 属性值会改变的话，则应该用 Key 属性来引用 ListImage 对象。例如，如果允许用户在集合中添加或删除他们自己的图象，那么 Index 属性值可能会改变。

当把一个 ListImage 对象添加到集合中，将返回对于最新创建的对象的引用。可以利用这个引用来设置该 ListImage 的其它属性，如下所示：

Dim imgX As ListImage

Dim I As Integer

Set imgX = ImageList1.ListImages. _

Add(,,LoadPicture("icons\comm\net01.ico"))

imgX.Key = "net connect" '利用新的引用来为 Key 赋值。


Add 方法（ListImages 集合）示例

本例把几个图象添加到一个 ListImages 集合中，然后在一个 TreeView 中使用这些图象。要试用此例，把 ImageList 和 TreeView 控件放置到一个窗体上，并把代码粘贴到该窗体的声明部分。运行此例，看看这个置于 ImageList 图片中的 TreeView 控件。

Private Sub Form_Load()

Dim imgX As ListImage

'把 3 个图标加载到 ImageList 控件的集合中。

Set imgX = ImageList1.ListImages. _

Add(,"rocket", LoadPicture("icons\industry\rocket.ico"))

Set imgX = ImageList1.ListImages. _

Add(,"plane",LoadPicture("icons\industry\plane.ico"))

Set imgX = ImageList1.ListImages. _

Add(,"car",LoadPicture("icons\industry\cars.ico"))

'设置 TreeView 控件的 ImageList 属性。

Set TreeView1.ImageList = ImageList1

'创建一个 Treeview，并使用 ListImage 对象来作为其图象。

Dim nodX As Node

Set nodX = TreeView1.Nodes.Add(,,,"Rocket")

nodX.Image = 1	'用图象 1 的 Index 属性。

Set nodX = TreeView1.Nodes.Add(,,,"Plane")

nodX.Image = "plane"	'用图象 2 的 Key 属性。

Set nodX = TreeView1.Nodes.Add(,,,"Car")

nodX.Image = "car"	'用图象 3 的 Key 属性。

End Sub


Draw 方法

在一幅图象上执行了一次图形操作后，把该图象绘制到某个目标设备描述体中，例如 PictureBox 控件中。

语法

object.Draw (hDC, x,y, style)

Draw 方法的语法包含下面部分：

部分	描述
object	必需的。对象表达式，其值是“应用于”列表中的对象。
hDC	必需的。一个设置为目标对象的 hDC 属性的值。
x,y	可选的。用来指定设备描述体内绘制图象的位置坐标。如果不指定这些，图象将被绘制在设备描述体的起点。
style	可选的。它指定了在图象上进行的操作，“设置值”中有详细说明。
设置值

style 的设置值是：

常数	值	描述
imlNormal	0	（缺省）正常的。无任何改变地绘制图象。
imlTransparent	1	透明的。绘制图象时，用 MaskColor 属性来决定图象的哪种颜色将是透明的。
imlSelected	2	选定的。用系统突出显示颜色绘制抖动的图象。
imlFocus	3	焦点。用突出显示颜色绘制抖动的图象和条带状的图象来产生阴影效果，以表明图象有焦点。
说明

hDC 属性是 Windows 操作系统用来作内部引用到对象的句柄（数值）。可以在任何有 hDC 属性的控件内部区域画图。在 Visual Basic 中，上述控件包括 Form 对象、PictureBox 控件和 Printer 对象。

因为应用程序运行时，对象的 hDC 可能会改变，所以最好是指定 hDC 属性而不是指定一个实际值。例如，下面的代码确保总能将正确的 hDC 值提供给 ImageList 控件：

ImageList1.ListImages(1).Draw Form1.hDC


Draw 方法示例

本例把一个图象加载到 ImageList 控件中。单击窗体时，用四种不同的样式把图象绘制在窗体上。要试用此例，把 ImageList 控件放置到窗体上，并把代码粘贴到该窗体的声明部分。运行此例，并单击窗体。

Private Sub Form_Load()

Dim X As ListImage

'把一幅图象加载到 ImageList 中。

Set X = ImageList1.ListImages. _

Add(, , LoadPicture("bitmaps\assorted\intl_no.bmp"))

End Sub

Private Sub Form_Click()

Dim space, intW As Integer	'创建间距变量。

'用 ImageWidth 属性来作间距。

intW = ImageList1.ImageWidth

space = Form1.Font.Size * 2 '用 Font.Size 来作高度间隔。

ScaleMode = vbPoints	'把 ScaleMode 设置成以磅为单位。

Cls '清除窗体。

'用 Normal 样式绘制图象。

ImageList1.ListImages(1).Draw Form1.hDC, , space,imlNormal

'设置 MaskColor 为红色，这种颜色将会变为透明。

ImageList1.MaskColor = vbRed

'用红色 (MaskColor)，即透明色绘制图象。

ImageList1.ListImages(1).Draw Form1.hDC, intW, space,imlTransparent

'用 Selected 样式绘制图象。

ImageList1.ListImages(1).Draw Form1.hDC, intW * 2,space,imlSelected

'用 Focus 样式绘制图象。

ImageList1.ListImages(1).Draw Form1.hDC, intW * 3, space,imlFocus

'为图象打印一个标题。

Print _

"Normal              Transparent           Selected         Focus"

End Sub


ExtractIcon 方法

从 ImageList 控件的 ListImage 对象中的位图创建图标，并返回对于最新创建图标的引用。

语法

object.ExtractIcon

object 所在处表示对象表达式，其值是“应用于”列表中的对象。

说明

可以象使用任何其它图标一样使用由 ExtractIcon 方法创建的图标。例如，可以用它作为 MouseIcon 属性的设置，如下面代码所示：

Set Command1.MouseIcon = ImageList1.ListImages(1).ExtractIcon


ExtractIcon 方法示例

本例把一个位图加载到 ImageList 控件中。当用户单击窗体时，用 ExtractIcon 方法从该位图创建一个图标，并把该图标用作 Form 对象的 MouseIcon 属性的设置值。要试用此例，把 ImageList 控件放置到窗体上，并把代码粘贴到该窗体的声明部分。运行本例，并单击窗体。

Private Sub Form_Load()

Dim imgX As ListImage

Set imgX = ImageList1.ListImages. _

Add(, , LoadPicture("bitmaps\assorted\balloon.bmp"))

End Sub

Private Sub Form_Click()

Dim picX As Picture

Set picX = ImageList1.ListImages(1).ExtractIcon  '构造一个图标。

With Form1

.MouseIcon =  picX	'设置新的图标。

.MousePointer = vbCustom 	'设置成自定义图标。

End With

End Sub


ImageHeight 和 ImageWidth 属性

•	ImageHeight 属性返回或设置 ImageList 控件中 ListImage 对象的高度。

•	ImageWidth 属性返回或设置 ImageList 控件中 ListImage 对象的宽度。

语法

object.ImageHeight

object.ImageWidth

object 所在处表示一个对象表达式，其值是“应用于”列表中的一个对象。

说明

高度和宽度都是以像素为度量单位的。ListImages 集合中所有图象都有相同的高度和宽度属性值。

当一个 ImageList 控件不包含任何 ListImage 对象时，可以设置 ImageHeight 和 ImageWidth 属性的值。但是，一旦添加了一个 ListImage 对象，则其后所有的图象都必须跟第一个对象有相同的高度和宽度。如果试图添加一个不同大小的图象，将会返回一个错误。


ImageHeight, ImageWidth 属性示例

本例把一个图标加载到 ImageList 控件中，并在 ListView 控件中使用该图象。单击窗体时，代码用 ImageHeight 属性来调整这个 ListView 控件的高度以容纳 ListImage 对象。要试用此例，把 ImageList 和 ListView 控件放置到窗体上，并把代码粘贴到窗体的声明部分。运行此例，并单击窗体。

Private Sub Form_Load()

'创建 ImageList 和 ListView 对象的变量。

Dim imgX As ListImage

Dim itmX As ListItem

Form1.ScaleMode = vbPixels '确认 ScaleMode 被设置成以像素为单位。

ListView1.BorderStyle = FixedSingle '显示边框。

'缩短 ListView 控件使得稍后的对比更加明显。

ListView1.Height = 50

'把一个大的位图放到 ImageList 中。

Set imgX = ImageList1.ListImages. _

Add(,, LoadPicture("bitmaps\gauge\vert.bmp"))

ListView1.Icons = ImageList1 '设置位图属性。

'在 ListView 控件中添加一项。

Set itmX = ListView1.ListItems.Add()

itmX.Icon = 1	'设置 Icon 属性为 ImageList 控件的第一个 ListImage 对象。

itmX.Text = "Thermometer"	'设置 ListView。ListItem 对象的文本。

End Sub

Private Sub Form_Click()

Dim strHW As String

strHW = "Height: " & ImageList1.ImageHeight & _

"   Width: " & ImageList1.ImageWidth

caption = strHW	'显示大小。

'扩大 ListView 以容纳最高的图象。

ListView1.Height = ImageList1.ImageHeight + 50

End Sub


ListImages 属性

返回对 ImageList 控件中 ListImage 对象的集合的引用。

语法

object.ListImages

object 所在处表示一个对象表达式，其值为“应用于”列表中的一个对象。

说明

可以用标准的集合方法（如 Add 和 Clear 方法）来操作 ListImage 对象。集合中的每一个成员都可以通过其索引或唯一关键字来访问。当把 ListImage 对象添加到一个集合中时，这些索引或唯一关键字被分别存储在 Index 和 Key 属性中。


ListImages 属性示例

本例把三个 ListImage 对象添加到 ListImages 集合中，并在 ListView 控件中使用它们。代码通过使用 ListImage 对象的 Key 和 Item 属性来引用它们。要试用此例，把 ImageList 和 ListView 控件放置在窗体上，并把代码粘贴到该窗体的声明部分。运行此例。

Private Sub Form_Load()

Dim imgX As ListImage

'把图象添加到 ListImages 集合中。

Set imgX = ImageList1. _

ListImages.Add(,"rocket",LoadPicture("icons\industry\rocket.ico"))

Set imgX = ImageList1. _

ListImages.Add(,"jet",LoadPicture("icons\industry\plane.ico"))

Set imgX = ImageList1. _

ListImages.Add(,"car",LoadPicture("icons\industry\cars.ico"))

ListView1.Icons = ImageList1 '设置 Icons 属性。

'把 Item 对象添加到 ListView 控件中。

Dim itmX as ListItem

Set itmX = ListView1.ListItems.Add()

'通过索引引用。

itmX.Icon = 1

itmX.Text = "Rocket"	'设置 Text 字符串。

Set itmX = ListView1.ListItems.Add()

'通过关键字 ("jet") 引用。

itmX.Icon = "jet"

itmX.Text = "Jet"	'设置 Text 字符串。

Set itmX = ListView1.ListItems.Add()

itmX.Icon = "car"

itmX.Text = "Car"	'设置 Text 字符串。

End Sub


MaskColor 属性

返回或设置用来为 ImageList 控件创建屏蔽的颜色。

语法

object.MaskColor [ = color]

MaskColor 属性的语法包含下面部分：

部分	描述
object	必需的。对象表达式，其值是“应用于”列表中的一个对象。
color	一个值或常数，它决定了用来创建屏蔽的颜色。可以用 Visual Basic 固有的常数、QBColor 函数或者 RGB 函数来指定颜色。
说明

ListImages 集合的每幅图象都有个与之相关联的屏蔽。这个屏蔽是从该图象本身派生出来的单色图象，是用 MaskColor 属性作为该屏蔽的指定颜色自动生成的。这个屏蔽并不直接使用，而是应用在对原始位图的图形操作，比如 Overlay 和 Draw 方法之中。例如，在 Overlay 方法中，MaskColor 属性决定了图象的哪种颜色将是透明的。

如果系统颜色改变了，则透明的颜色也会改变，使图片看起来不可预料。最好使用非系统颜色。


MaskColor 属性示例

本例把几个位图加载到 ImageList 控件中。单击窗体时，一个 ListImage 对象被叠加在另一个 ListImage 对象上。要试用此例，把 ImageList 控件和 Picture 控件放置到窗体上，并把代码粘贴到该窗体的声明部分。运行此例，并单击窗体。

Private Sub Form_Load()

Dim imgX As ListImage

'加载位图。

Set imgX = ImageList1.ListImages. _

Add(, "No", LoadPicture("bitmaps\assorted\Intl_No.bmp"))

Set imgX = ImageList1.ListImages. _

Add(, , LoadPicture("bitmaps\assorted\smokes.bmp"))

Set imgX = ImageList1.ListImages. _

Add(, , LoadPicture("bitmaps\assorted\beany.bmp"))

ScaleMode = vbPixels

'设置 MaskColor 属性。

ImageList1.MaskColor = vbGreen

'设置窗体的 BackColor 为白色。

Form1.BackColor = vbWhite

End Sub

Private Sub Form_Click()

Static intCount As Integer '静态变量，用于图象计数。

'如果变量超过 ListImages.Count 的值则重置变量为 2。

If intCount > ImageList1.ListImages.Count Or intCount < 1 Then

intCount = 2 '重置为第 2 幅图象。

End If

'把 ListImage(1) 叠加在 ListImages 2-3 之上。

Picture1.Picture = ImageList1.Overlay(intCount, 1)

'增加计数值。

intCount = intCount + 1

'创建变量来保存 ImageList.ImageWidth 的值。

Dim intW

intW = ImageList1.ImageWidth

'为了引用方便把图象绘制到窗体上。用 ImageWidth 值来间隔图象。

ImageList1.ListImages(1).Draw Form1.hDC, 0, 0, imlNormal

ImageList1.ListImages(2).Draw Form1.hDC, 0, intW, imlNormal

ImageList1.ListImages(3).Draw Form1.hDC, 0, intW * 2, imlNormal

End Sub


UseMaskColor 属性（ImageList 控件）

返回或设置一个值，该值决定用 MaskColor 属性中指定的颜色作为掩码。

语法

object.UseMaskColor [ = value]

UseMaskColor 属性语法包含下面部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的一个对象。
value	布尔表达式的值决定是否将使用 MaskColor 属性，如“设置值”中所描述。
设置值

value 的设置值是：

值	描述
True	用 MaskColor I创建透明区域。
False	（缺省）不用 MaskColor。
说明

仅当 Style 属性被设置成 1— 图形时，才使用 MaskColor 和 UseMaskColor 属性。


Overlay 方法

从一个 ListImages 集合绘制一幅图象，叠加在另一幅上面，并返回结果。

语法

object.Overlay (index1, index2)

Overlay 方法的语法包含下面部分：

部分	描述
object	必需的。对象表达式，其值是“应用于”列表中的一个对象。
index1	必需的。一个整数（Index 属性）或唯一的字符串（Key 属性），它指定了将被叠加的图象。
index2	必需的。一个整数（Index 属性）或唯一字符串（Key 属性），它指定了将被绘制在由 index1 指定的对象上的图象。该图象中与 MaskColor 属性匹配的颜色被设置成透明的。如果没有任何颜色与之匹配，该图象将不透明地绘制在其它图象上。
说明

Overlay 方法连同 MaskColor 属性一起使用，将两幅根本不同的图象创建成一幅单一图象。Overlay 方法把一幅位图强加到另一幅位图之上创建了第三幅图象，也就是复合图象。MaskColor 属性决定了叠加图象的哪种颜色是透明的。

index 可以是一个索引，也可以是一个关键字。例如，用集合中的第二幅图片叠加第一幅图片，可以这样做：

Set Picture1.Picture = ImageList1.Overlay(1,2) '通过 Index 引用。

'或者通过 Key 属性引用。

Set Picture1.Picture = ImageList1.Overlay("First", "Second")


Overlay 方法示例

本例把五幅 ListImage 对象加载到 ImageList 控件中，并在两个 PictureBox 控件中显示任意两幅图象。对于每个 PictureBox，从两个 ComboBox 控件之一选择一幅图象来显示。当单击窗体时，代码用 Overlay 方法创建第三幅图象并显示在第三个 PictureBox 控件中。要试用此例，把一个 ImageList 控件、两个 ComboBox 控件和三个 PictureBox 控件放置在同一窗体上，把代码粘贴到该窗体的声明部分。运行此例，并单击窗体。

Private Sub Form_Load()

Dim X As ListImage

'把五幅图象添加到 ListImages 集合中。

Set X = ImageList1.ListImages. _

 Add(, , LoadPicture("icons\elements\moon05.ico"))

Set X = ImageList1.ListImages. _

 Add(, , LoadPicture("icons\elements\snow.ico"))

Set X = ImageList1.ListImages. _

 Add(, , LoadPicture("icons\writing\erase02.ico"))

Set X = ImageList1.ListImages. _

 Add(, , LoadPicture("icons\writing\note06.ico"))

Set X = ImageList1.ListImages. _

 Add(, , LoadPicture("icons\flags\flgfran.ico"))

With combo1	'置于第一个 ComboBox 控件中。

.AddItem "Moon"

.AddItem "Snowflake"

.AddItem "Pencil"

.AddItem "Note"

.AddItem "Flag"

.ListIndex = 0

End With

With combo2	'置于第二个 ComboBox 控件中。

.AddItem "Moon"

.AddItem "Snowflake"

.AddItem "Pencil"

.AddItem "Note"

.AddItem "Flag"

.ListIndex = 2

End With

Picture1.BackColor = vbWhite	'使 BackColor 为白色。

Picture2.BackColor = vbWhite

Picture3.BackColor = vbWhite

End Sub

Private Sub Form_Click()

'叠加两个图象，并在 PictureBox3 中显示。

Set Picture3.Picture = ImageList1. _

 Overlay(combo1.ListIndex + 1, combo2.ListIndex + 1)

End Sub

Private Sub combo1_Click()

'改变 PictureBox 以反映 ComboBox 的选择。

Set Picture1.Picture = ImageList1. _

 ListImages(combo1.ListIndex + 1).ExtractIcon

End Sub

Private Sub combo2_Click()

'改变 PictureBox 以反映 ComboBox 的选择。

Set Picture2.Picture = ImageList1. _

 ListImages(combo2.ListIndex + 1).ExtractIcon

End Sub


ImageList 控件常数

常数	值	描述
imlNormal	0	无变化地绘制图象。
ImlTransparent	1	透明绘制图象。
imlSelected	2	有选择地绘制图象。
imlFocus	3	有焦点地绘制图象。


hImageList 属性（ImageList 控件）

返回 ImageList 控件的句柄。

语法

object.hImageList

object 所在处表示对象表达式，其值为一个 ImageList 控件。

说明

在应用程序中，Microsoft Windows 操作环境通过赋给 ImageList 控件一个句柄，或者说 hImageList 来识别 ImageList 控件。hImageList 属性是与 Windows API 调用一起使用的。许多与 ImageList 相关的 API 函数需要用活动窗口的 hImageList 作为参数。

注意    因为在程序运行时这个属性的值可能会变化，所以不要把这个 hImageList 值储存在某个变量中。


ListView 控件

ListView 控件可使用四种不同视图显示项目。通过此控件，可将项目组成带有或不带有列标头的列，并显示伴随的图标和文本。

语法

ListView

说明

可使用 ListView 控件将称作 ListItem 对象的列表条目组织成下列四种不同的视图之一：

•	大（标准）图标

•	小图标

•	列表

•	报表

View 属性决定在列表中控件使用何种视图显示项目。还可用 LabelWrap 属性控制列表中与项目关联的标签是否可换行显示。另外，还可管理列表中项目的排序方法和选定项目的外观。

ListView 控件包括 ListItem 和 ColumnHeader 对象。ListItem 对象定义 ListView 控件中项目的各种特性，诸如：

•	项目的简要描述。

•	由 ImageList 控件提供的与项目一起出现的图标。

•	附加的文本片段，称作子项目，它们与显示在报表视图中的 ListItem 对象关联。

可以使用 HideColumnHeaders 属性决定是否在 ListView 控件中显示列标头。列标头可以在设计时添加，也可以在运行时添加。设计时，使用 ListView“控件属性”对话框的“列首”选项卡添加列标头。运行时，使用 Add 方法添加 ColumnHeader 对象到 ColumnHeaders 集合中。

发行注意   ListView 控件是 COMCTL32.OCX 文件中一组 ActiveX 控件的一部分。若要在应用程序中使用 ListView 控件，则必须将 COMCTL32.OCX 文件添加到工程中。当发行应用程序时，请将 COMCTL32.OCX 文件安装到用户的 Microsoft Windows System 或 System32 目录下。关于如何将 ActiveX 控件添加到 Visual Basic 工程的详细信息，请参阅 Visual Basic《程序员指南》。


ColumnHeader 对象、ColumnHeaders 集合

•	ColumnHeader 对象是 ListView 控件中包含标头文字的项目。

•	ColumnHeaders 集合包含一个或多个 ColumnHeader 对象。

语法

listview.ColumnHeaders

listview.ColumnHeaders(index)

根据标准的集合语法，上面的语法行分别引用集合和集合中单个元素。

ColumnHeader 对象，ColumnHeaders 集合的语法包含下面部分：

部分	描述
listview	对象表达式，其值是 ListView 控件。
Index	一个唯一标识对象集合成员的整数或字符串。如果为整数，它将是 Index 属性的值；如果为字符串，它将是 Key 属性的值。
说明

只能在报表视图中查看 ColumnHeader 对象。

可以在设计时或在运行时添加 ColumnHeader 对象到 ListView 控件中。

利用 ColumnHeader 对象，用户可以：

•	单击对象触发 ColumnClick 事件并根据数据项目将项目排序。

•	拖动对象的右边框来调整列宽度。

•	在报表视图中隐藏 ColumnHeader 对象。

ListView 控件中总是有一列，即列 1。这一列包含实际的 ListItem 对象而不是它们的子项目。第二列（列 2）包含子项目。因此，ColumnHeader 对象总是比子项目多一个，ListItem 对象的 SubItems 属性是大小为 ColumnHeaders.Count - 1 的基于 1 的数组。

ColumnHeader 对象的数目决定每个 ListItem 对象可包含的子项目数目。删除 ColumnHeader 对象后所有与列关联的子项目也将被删除，并且每个 ListItem 对象的子项目数组将平移以更新 ColumnHeader 的索引，而这将导致剩余的列标头 SubItemIndex 属性的改变。


Add 方法（ColumnHeaders 集合）

将 ColumnHeader 对象添加到 ListView 控件的 ColumnHeaders 集合中。

语法

object.Add(index, key, text, width, alignment)

Add 方法的语法包含下面部分：

部分	描述
object	必需的。对象表达式，其值是 ColumnHeaders 集合。
index	可选的。唯一标识对象集合成员的整数。
key	可选的。唯一的字符串表达式，可以用来访问集合的成员。
text	可选的。出现在 ColumnHeader 对象中的字符串。
width	可选的。数值表达式，它使用控件容器的度量单位指定对象的宽度。
alignment	可选的。决定 ColumnHeader 对象中文本对齐方式的整数。关于设置信息，请参阅“请参阅”列表中 Alignment 属性的信息。
说明

Add 方法返回新插入的 ColumnHeader 对象的引用。

使用 index 参数在 ColumnHeaders 集合的特定位置插入列标头。

当 ColumnHeaders 集合成员可能动态变更时，应使用 Key 属性引用它们，因为任何 ColumnHeader 对象的 Index 属性都可以改变。


ListItem 对象,ListItems 集合

•	ListItem 包含文本和相关图标（ListImage 对象）的索引，除此之外，当它为报表视图时，ListItem 还包含代表子项目的字符串数组。

•	ListItems 集合包含一个或多个 ListItem 对象。

语法

listview.ListItems

listview.ListItems(index)

根据标准的集合语法，上面的语法行分别引用集合和集合中的单个元素。

ListItem 对象，ListItems 集合的语法包含下面部分：

部分	描述
listview	对象表达式，其值是 ListView 控件。
index	唯一标识 ListItem 集合成员的整数或字符串。如果为整数，它将是 Index 属性的值；如果为字符串，它将是 Key 属性的值。
说明

ListItem 对象可包含文本和图片。然而，若要使用图片则必须通过 Icons 和 SmallIcons 属性引用 ImageList 控件。

也可使用 Icon 或 SmallIcon 属性变更图象。

下列示例说明了如何将 ColumnHeaders 对象和若干带有子项目的 ListItem 对象添加到 ListView 控件中。

Private Sub Form_Load()

Dim clmX As ColumnHeader

Dim itmX As ListItem

Dim i As Integer

For i = 1 To 3

Set clmX = ListView1.ColumnHeaders.Add()

clmX.Text = "Col" & i

Next i

'添加 10 个具有相同图标的项目到列表中

For i = 1 To 10

Set itmX = ListView1.ListItems.Add()

itmX.SmallIcon = 1

itmX.Text = "ListItem " & i

itmX.SubItems(1) = "Subitem 1"

itmX.SubItems(2) = "Subitem 2"

Next i

End Sub


Add 方法（ListItems 集合）

添加 ListItem 对象到 ListView 控件的 ListItems 集合中并返回新创建对象的引用。

语法

object.Add(index, key, text, icon, smallIcon)

Add 方法的语法包含下面部分：

部分	描述
object	必需的。对象表达式，其值是 ListItems 集合。
index	可选的。指定在何处插入 ListItem 的整数。若未指定索引，则将 ListItem 添加到 ListItems 集合的末尾。
key	可选的。唯一的字符串表达式，用来访问集合成员。
text	可选的。与 ListItem 对象控件关联的字符串。
icon	可选的。当 ListView 控件设为图标视图时，此整数设置从 ImageList 控件中选定的欲显示的图标。
smallIcon	可选的。当 ListView 控件设为小图标时，此整数设置从 ImageList 控件中选定的欲显示的图标。
说明

设置 Icons 或 SmallIcons 属性之前必须先初始化它们。有两种初始化方法：在设计时，使用 ListView 控件属性对话框的“通用”选项卡指定 ImageList 对象；在运行时，使用下列代码初始化：

ListView1.Icons = ImageList1   '假设 Imagelist 为 ImageList1。

ListView1.SmallIcons = ImageList2

如果列表尚未排序，则可使用 index 参数将 ListItem 对象插入到任意位置。如果列表已排序，则将忽略 index 参数并根据排序顺序把 ListItem 对象插入到适当的位置。

若未提供 index，则 ListItem 对象将被添加一个索引，此索引等于集合中 ListItem 对象的数目加 1。

当希望对象的 Index 属性可变更时，例如希望动态地从集合中添加和删除对象时，使用 Key 属性引用 ListItems 集合的成员。


Add 方法 (ListItems, ColumnHeaders),ListItems 属性,SubItems 属性示例

下面的示例使用 Biblio.mdb 数据库作为资源，通过 ListItem 对象移居 ListView 控件。要试用此例，请将一个 ListView 控件放置在窗体上，并将代码粘贴到窗体的声明部分。

还必须确保已将 Biblio.mdb 安装在机器上。在以下代码中检查 OpenDatabase 函数中的路径，并改变它，使之反映 Biblio.mdb 在机器上的实际路径。

注意   除非添加到 Microsoft DAO 3.5 对象库的“引用”，否则示例无法运行。。为此，在 Project 菜单上单击 References。搜索 Microsoft DAO 3.5 对象库并单击复选框来选择。

Private Sub Form_Load()

'添加 ColumnHeaders。列宽度等于控件宽度

'除以 ColumnHeader 对象的数目。

ListView1.ColumnHeaders. _

Add , , "Author", ListView1.Width / 3)

ListView1.ColumnHeaders. _

Add , , "Author ID", ListView1.Width / 3, _

lvwColumnCenter

ListView1.ColumnHeaders. _

Add , , "Birthdate", ListView1.Width / 3)

' Set View property to Report.

ListView1.View = lvwReport

'为数据访问对象声明对象变量。

Dim myDb As Database, myRs As Recordset

'设置 Database 为 BIBLIO.MDB 数据库。

' IMPORTANT: the Biblio.mdb must be on your

' machine, and you must set the correct path to

' the file in the OpenDatabase function below.

Set myDb = 	DBEngine.Workspaces(0) _

.OpenDatabase("c:\Program Files\VB\BIBLIO.MDB")

'设置 recordset 为 "Authors" 表。

Set myRs = _

myDb.OpenRecordset("Authors", dbOpenDynaset)

'声明变量以添加 ListItem 对象。

Dim itmX As ListItem

'若当前记录不是最后一条记录，则添加一个 ListItem 对象。

'ListItem 对象的文本使用 author 字段。

'ListItem 对象的 SubItem(1) 使用 AuthorID 字段。

'ListItem 对象的 SubItem(2) 使用 "Year of Birth" 字段。

While Not myRs.EOF

Set itmX = ListView1.ListItems. _

Add(, , CStr(myRs!Author),1)	'Author 字段。

'若 AuthorID 字段不为空，则将 SubItem 1 设置为此字段。

If Not IsNull(myRs!Au_id) Then

itmX.SubItems(1) = CStr(myRs!Au_id)   ' Author ID。

End If

'若 birth 字段不为空，则将 SubItem 2 设置为此字段。

If Not IsNull(myRs![Year Born]) Then

itmX.SubItems(2) = myRs![Year Born]

End If

myRs.MoveNext	'移动到下一条记录。

Wend

End Sub


Alignment 属性（ColumnHeader 对象）

返回或设置 ColumnHeader 对象中文本的对齐方法。

语法

object.Alignment [= integer]

Alignment 属性的语法包含下面部分：

部分	描述
object	对象表达式，其值是 ColumnHeader 对象。
integer	决定对齐方式的整数，如“设置值”中所描述。
设置值

integer 的设置值为：

常数	值	描述
lvwColumnLeft	0	（缺省）左对齐。文本向左对齐。
lvwColumnRight	1	右对齐。文本向右对齐。
lvwColumnCenter	2	居中。文本居中对齐。


Arrange 属性（ListView 控件）

返回或设置一个值，此值决定如何排列 ListView 控件中的图标或小图标视图。

语法

object.Arrange [= value]

Arrange 属性的语法包含下面部分：

部分	描述
object	对象表达式，其值是 ListView 控件。
value	决定如何排列图标或小图标的整数或常数，如“设置值”中所描述。
设置值

value 的设置值为：

常数	值	描述
lvwNone	0	（缺省）无。
lvwAutoLeft	1	左对齐。项目自动沿控件左侧对齐。
lvwAutoTop	2	顶对齐。项目自动沿控件顶端对齐。


Arrange 属性示例

本示例将若干 ListItem 对象和子项目添加到 ListView 控件中。单击 OptionButton 控件时将根据 OptionButton 的 Index 值设置 Arrange 属性。要试用此例，请将一个包含三个 OptionButton 控件的控件数组、一个 ListView 控件和两个 ImageList 控件放置在窗体上，并将代码粘贴到窗体的声明部分。运行示例，并单击 OptionButton 改变 Arrange 属性。

Private Sub Option1_Click(Index as Integer)

'设置 Arrange 属性为 Option1.Index。

ListView1.Arrange = Index

End Sub

Private Sub Form_Load()

'用 Arrange 选项标注 OptionButton 控件。

Option1(0).Caption = "No Arrange"

Option1(1).Caption = "Align Auto Left"

Option1(2).Caption = "Align Auto Top"

'为创建 ListView 和 ImageList 对象声明变量。

Dim i As Integer

Dim itmX As ListItem	'声明 ListItems 的对象变量。

Dim imgX As ListImage	'声明 ListImages 的对象变量。

'添加 ListImage 对象到 ImageList 控件中。

Set imgX = ImageList1.ListImages. _

Add(,,LoadPicture("icons\mail\mail01a.ico"))

ListView1.Icons = ImageList1	'与 ImageList 控件关联。

'添加 10 个均包含图标的 ListItem 对象。

For i = 1 To 10

Set itmX = ListView1.ListItems.Add()

itmX.Icon = 1	'图标。

itmX.Text = "ListItem " & i

Next i

End Sub


ColumnClick 事件

单击 ListView 控件中的 ColumnHeader 对象时，该事件发生。仅当控件的 View 属性为报表视图时可用。

语法

Private Sub object_ColumnClick(ByVal columnheader As ColumnHeader)

ColumnClick 事件的语法包含下面部分：

部分	描述
object	对象表达式，其值是 ListView 控件。
columnheader	被单击的 ColumnHeader 对象的引用。
说明

通常在代码中使用 Sorted、SortKey 和 SortOrder 属性把被单击列中的 ListItem 对象排序。


ColumnHeaders 属性（ListView 控件）

返回 ColumnHeader 对象集合的引用。

语法

object.ColumnHeaders

object 所在处代表一个对象表达式，其值是 ListView 控件。

说明

可以使用标准的集合方法（例如 Remove 方法）操作 ColumnHeader 对象。可通过 ColumnHeader 的索引或通过 Key 属性中存储的唯一关键字访问集合中的每个 ColumnHeader。


Ghosted 属性

返回或设置一个值，它决定是否 ListView 控件的 ListItem 对象不可用（此时控件是暗淡的）。

语法

object.Ghosted [= boolean]

Ghosted 属性的语法包含下面部分：

部分	描述
object	对象表达式，其值是 ListItem 对象。
boolean	指定图标或小图标是否为幻影的布尔表达式，如“设置值”中所描述。
设置值

boolean 的设置值为：

设置值	描述
True	无法使用 ListItem 对象。
False	（缺省）可使用 ListItem 对象。
说明

通常使用 Ghosted 属性显示 ListItem 被剪切或由于某些原因被禁止使用。

选择幻影的 ListItem 时，其标签将突出显示，但不突出显示图象。


Ghosted,MultiSelect 属性示例

本示例将 BIBLIO.MDB 数据库 Authors 表的内容植入 ListView 控件并允许使用 OptionButton 控件设置 MultiSelect 属性选项。可以只选择任何一个项目，也可按下 SHIFT 键选择多个项目。单击 CommandButton 设置选定项目的 Ghosted 属性为 True。要试用此例，请将一个包含两个 OptionButton 控件的控件数组、一个 ListView 控件、一个 ImageList 控件和一个 CommandButton 控件放置在窗体上，并将代码粘贴到窗体的声明部分。

注意   必须使用“工具”菜单的“引用”命令添加 Microsoft DAO 3.0 对象库的引用，否则示例无法运行。运行此例，单击 OptionButton 选择 MultiSelect 选项，单击项目选定它们后，再次单击 CommandButton 将使它们成为幻影。

Private Sub Command1_Click()

Dim x As Object

Dim i As Integer

'使选定的项目成为幻影。

If ListView1.SelectedItem Is Nothing Then Exit Sub

For i = 1 To ListView1.ListItems.Count

If ListView1.ListItems(i).Selected = True Then

ListView1.ListItems(i).Ghosted = True

End If

Next i

End Sub

Private Sub Form_Load()

'为 ColumnHeader 对象创建对象变量。

Dim clmX As ColumnHeader

'添加 ColumnHeaders。列宽度等于控件宽度

'除以 ColumnHeader 对象的数目。

Set clmX = ListView1.ColumnHeaders. _

Add(, , "Company", ListView1.Width / 3)

Set clmX = ListView1.ColumnHeaders. _

Add(, , "Address", ListView1.Width / 3)

Set clmX = ListView1.ColumnHeaders. _

Add(, , "Phone", ListView1.Width / 3)

'用 MultiSelect 选项标注 OptionButton 控件。

Option1(0).Caption = "No MultiSelect"

Option1(1).Caption = "MultiSelect"

ListView1.MultiSelect = 1 '设置 MultiSelect 为 True

ListView1.BorderStyle = ccFixedSingle '设置 BorderStyle 属性。

ListView1.View = lvwReport	'设置 View 属性为报表。

'添加一个图象到 ImageList 控件中。

Dim imgX As ListImage

Set imgX = ImageList1.ListImages. _

Add(, , LoadPicture("icons\mail\mail01a.ico"))

ListView1.Icons = ImageList1

'为数据访问对象创建对象变量。

Dim myDb As Database, myRs As Recordset

'设置数据库为 BIBLIO.MDB 数据库。

Set myDb = DBEngine.Workspaces(0).OpenDatabase("BIBLIO.MDB")

'设置 recordset 为 Publishers 表。

Set myRs = myDb.OpenRecordset("Publishers", dbOpenDynaset)

'创建变量以添加 ListItem 对象。

Dim itmX As ListItem

'若当前记录不是最后一条记录，则添加 ListItem 对象。

'ListItem 对象的文本使用 Name 字段。

'ListItem 对象的 SubItem(1) 使用 Address 字段。

'ListItem 对象的 SubItem(2) 使用 Phone 字段。

While Not myRs.EOF

Set itmX = ListView1.ListItems.Add(, , CStr(myRs!Name))

itmX.Icon = 1  '设置图标为 ImageList 图标。

'若 Address 字段不为空，设置 SubItem 1 为此字段。

If Not IsNull(myRs!Address) Then

itmX.SubItems(1) = CStr(myRs!Address)  'Address 字段。

End If

'若 Phone 字段不为空，则设置 SubItem 2 为此字段。

If Not IsNull(myRs!Telephone) Then

itmX.SubItems(2) = myRs!Telephone  'Phone 字段。

End If

myRs.MoveNext  '移动到下一条记录。

Wend

ListView1.View = lvwIcon  '显示图标视图。

Command1.Caption = "Cut"  '设置 CommandButton 的标题。

'为窗体添加标题。

Me.Caption = "Select any item(s) and click 'Cut'."

End Sub

Private Sub Option1_Click(Index as Integer)

ListView1.MultiSelect = Index

End Sub


HideColumnHeaders 属性（ListView 控件）

返回或设置是否在报表视图中隐藏 ListView 控件的 ColumnHeader 对象。

语法

object.HideColumnHeaders [= boolean]

HideColumnHeaders 属性的语法包含下面部分：

部分	描述
object	对象表达式，其值是 ListView 控件。
Boolean	指定是否在报表视图中隐藏列标头的布尔表达式，如“设置值”中所描述。
设置值

boolean 的设置值为：

设置值	描述
True	列标头不可视。
False	（缺省）列标头可视。
说明

即使 HideColumnHeaders 属性设置为 True，ListItem 对象和任何相关的子项目仍保持可视。


HideColumnHeaders 属性示例

本示例将若干包含子项目的 ListItem 对象添加到 ListView 控件中。单击 CommandButton 时，HideColumnHeaders 属性将在 True (-1) 和 False (0)之间切换。要试用此例，请将 ListView 和 CommandButton 控件放置在窗体上，并将代码粘贴到窗体的声明部分。运行此例并单击 CommandButton 以切换 HideColumnHeaders 属性。

Private Sub Command1_Click()

'在开和关之间切换 HideColumnHeaders 属性。

ListView1.HideColumnHeaders = Abs(ListView1.HideColumnHeaders) - 1

End Sub

Private Sub Form_Load()

Dim clmX As ColumnHeader

Dim itmX As ListItem

Dim i As Integer

Command1.Caption = "HideColumnHeaders"

'为控件添加三个 ColumnHeader 对象。

For i = 1 To 3

Set clmX = ListView1.ColumnHeaders.Add()

clmX.Text = "Col" & i

Next I

'设置视图为报表型。

ListView1.View = lvwReport

'为控件添加十个 ListItems。

For i = 1 To 10

Set itmX = ListView1.ListItems.Add()

itmX.Text = "ListItem " & i

itmX.SubItems(1) = "Subitem 1"

itmX.SubItems(2) = "Subitem 2"

Next i

End Sub


Icon,SmallIcon 属性（ListItem 对象）

返回或设置与 ImageList 控件中 ListItem 对象关联的图标或小图标的索引值或关键字值。

语法

object.Icon [= index]

object.SmallIcon [= index]

Icon，SmallIcon 属性的语法包括如下部分：

部分	描述
object	对象表达式，其值是 ListItem 对象。
Index	标识关联 ImageList 控件中的图标或小图标的整数或唯一的字符串。若为整数，其值为 ListItem 对象的 Index 属性；若为字符串，其值为 Key 属性值。
说明

使用 ListItem 对象中的图标之前必须将 ImageList 控件与包含对象的 ListView 控件相关联。关于详细的信息，请参阅 Icons，SmallIcons 属性 （ListView 控件）的信息。下面的示例说明了正确的语法：

ListView1.ListItems(1).SmallIcons=1

ListView 控件设置为小图标视图时将显示图象。


Icons,SmallIcons 属性

返回或设置与 ListView 控件中图标视图和小图标视图关联的 ImageList 控件。

语法

object.Icons [= imagelist]

object.SmallIcons [= imagelist]

Icons，SmallIcons 属性的语法包括下述部分：

部分	描述
object	对象表达式，其值是 ListView 控件。
imagelist	对象表达式，其值是 ImageList 控件。
说明

如果要在运行时将 ImageList 控件与 ListView 控件关联，则请将这些属性设置为期望的 ImageList 控件。

ListView 控件中的每个 ListItem 对象也都具有 Icon 和 SmallIcon 属性，它们索引 ListImage 对象并决定将显示哪个图象。

将 ImageList 与 ListView 控件关联后，就可在过程中使用 Index 或 Key 属性值引用 ListImage 对象。


Icon,SmallIcon,Icons,SmallIcons,View 属性示例

本示例将 BIBLIO.MDB 数据库中 Publishers 表的内容植入 ListView 控件。View 属性选项标注在四个 OptionButton 控件中。还必须将两个 ImageList 控件放置在窗体上：一个包含 Icon 属性的图象，另一个包含每个 ListItem 对象 SmallIcon 属性的图象。要试用此例，请将一个 ListView、一个包含四个 OptionButton 控件的控件数组和两个 ImageList 控件放置在窗体上，并将代码粘贴到窗体的声明部分。

注意   必须使用“工具”菜单的“引用”命令添加 Microsoft DAO 3.0 对象库的引用，否则示例无法运行。运行示例并单击 ComboBox 控件来切换视图。

Private Sub Option1_Click(Index as Integer)

'设置 ListView 控件的 View 属性为

' Option1 的索引

ListView1.View = Index

End Sub

Private Sub Form_Load()

'为 ColumnHeader 对象创建对象变量。

Dim clmX As ColumnHeader

'添加 ColumnHeaders。列宽度等于控件的宽度

'除以 ColumnHeader 对象的数目。

Set clmX = ListView1.ColumnHeaders. _

Add(, , "Company", ListView1.Width / 3)

Set clmX = ListView1.ColumnHeaders. _

Add(, , "Address", ListView1.Width / 3)

Set clmX = ListView1.ColumnHeaders. _

Add(, , "Phone", ListView1.Width / 3)

ListView1.BorderStyle = ccFixedSingle '设置 BorderStyle 属性。

ListView1.View = lvwReport '设置 View 属性为报表型。

'添加一个图象到 ImageList1--图标 ImageList。

Dim imgX As ListImage

Set imgX = ImageList1.ListImages. _

Add(, , LoadPicture("icons\mail\mail01a.ico"))

'添加一个图象到 ImageList2--小图标 ImageList。

Set imgX = ImageList2.ListImages. _

Add(, , LoadPicture("bitmaps\assorted\w.bmp"))

'若要将 ImageList 控件和 ListView 控件一起使用，必须

'将 Icons 和 SmallIcons 属性

'与特定的 ImageList 控件关联。

ListView1.Icons = ImageList1

ListView1.SmallIcons = ImageList2

'用 View 选项标注 OptionButton 控件。

Option1(0).Caption = "Icon"

Option1(1).Caption = "SmallIcon"

Option1(2).Caption = "List"

Option1(3).Caption = "Report"

ListView1.View = lvwIcon '设置为图标视图

'为数据访问对象创建对象变量。

Dim myDb As Database, myRs As Recordset

'设置数据库为 BIBLIO.MDB 数据库。

Set myDb = DBEngine.Workspaces(0).OpenDatabase("BIBLIO.MDB")

'设置 recordset 为 Publishers 表。

Set myRs = myDb.OpenRecordset("Publishers", dbOpenDynaset)

'为添加 ListItem 对象创建变量。

Dim itmX As ListItem

'若当前记录不是最后一条记录，则添加 ListItem 对象。

'ListItem 对象的文本使用 Name 字段。

'ListItem 对象的 SubItem(1) 使用 Address 字段。

'ListItem 对象的 SubItem(2) 使用 Phone 字段

While Not myRs.EOF

Set itmX = ListView1.ListItems.Add(, , CStr(myRs!Name))

itmX.Icon = 1	'设置 ImageList1 中的一个图标。

itmX.SmallIcon = 1	'设置 ImageList2 中的一个图标。

'若 Address 字段不为空，则设置 SubItem 1 为此字段。

If Not IsNull(myRs!Address) Then

itmX.SubItems(1) = CStr(myRs!Address) 'Address 字段。

End If

'若 Phone 字段不为空，则设置 SubItem 2 为此字段。

If Not IsNull(myRs!Telephone) Then

itmX.SubItems(2) = myRs!Telephone  'Phone 字段。

End If

myRs.MoveNext  '移动到下一条记录。

Wend

End Sub


ListItems 属性（ListView 控件）

返回 ListView 控件中 ListItem 对象集合的引用。

语法

object.ListItems

object 所在处代表对象表达式，其值是 ListView 控件。

说明

可使用标准集合方法操作 ListItem 对象。集合中每个 ListItem 可通过其唯一关键字访问，此关键字在 Key 属性中创建并存贮。

也可使用 Index 属性根据 ListItem 对象的显示位置检索 ListItem 对象。


LabelWrap 属性（ListView 控件）

返回或设置一个值，此值决定当 ListView 控件为图标视图时标签是否可换行。

语法

object.LabelWrap [= boolean]

LabelWrap 属性的语法包含下面部分：

部分	描述
object	对象表达式 ，其值为 ListView 控件。
boolean	指定标签是否可换行的布尔表达式，如“设置值”中所描述。
设置值

boolean 的设置值为：

设置值	描述
True	（缺省）标签可换行。
False	标签不能换行。
说明

在 Windows NT 中，桌面选项中控件面板设置的图标间距决定标签的长度。在 Windows 95 中，使用“显示器”控制面板中的“外观”选项卡设置标签的长度。


MultiSelect 属性（ListView 控件）

返回或设置一个值，此值指示用户是否可在 ListView 控件中选择多个 ListItems。

语法

object.MultiSelect [= boolean]

MultiSelect 属性的语法包含下面部分：

部分	描述
object	对象表达式，其值是 ListView 控件。
boolean	指定选择类型的值，如“设置值”中所描述。
设置值

boolean 的设置值为：

常数	描述
False	（缺省）不允许选择多个 ListItems。
True	允许选择多个 ListItems。按 SHIFT 键并单击鼠标或者按 SHIFT 键和方向键（UP 键、DOWN 键、LEFT 键和 RIGHT 键）之一，可将选择从先前选定的 ListItem 扩展到当前的 ListItem。按 CTRL 键并单击鼠标将选定或者撤消选定列表中的一个 ListItem。


SortKey 属性（ListView 控件）

返回或设置一个值，此值决定 ListView 控件中的 ListItem 对象如何排序。

语法

object.SortKey [= integer]

SortKey 属性的语法包含下面部分：

部分	描述
object	对象表达式，其值是 ListView 控件。
integer	指定排序关键字的整数，如“设置值”中所描述。
设置值

integer 的设置值为：

设置值	描述
0	使用 ListItem 对象的 Text 属性排序。
> 1	使用子项目排序，子项目的集合索引在此指定。
说明:

在改变发生前，Sorted 属性必须设置为 True。

通常希望单击列标头时将列表排序。所以，ColumnClick 事件通常包括 SortKey 属性并使用单击的列将列表排序，下面的示例演示了这一点：

Private Sub ListView1_ColumnClick (ByVal ColumnHeader as ColumnHeader)

ListView1.SortKey=ColumnHeader.Index-1

End Sub


SortOrder 属性（ListView 控件）

返回或设置一个值，此值决定 ListView 控件中的 ListItem 对象以升序或降序排序。

语法

object.SortOrder [= integer]

SortOrder 属性的语法包含下面部分：

部分	描述
object	对象表达式，其值是 ListView 控件。
integer	指定排序类型的整数，如“设置值”中所描述。
设置值

integer 的设置值为：

常数	值	描述
lvwAscending	0	（缺省）升序。从字母表首部 (A-Z) 或最早的日期开始排序。数字以字符串的形式排序，第一个数位决定排序的起始位置，其后的数位决定子排序。
LvwDescending	1	降序。从字母表尾部 (Z-A) 或最晚的日期开始排序。数字以字符串的形式排序，第一个数位决定排序的起始位置，其后的数位决定子排序。
说明

根据 SortOrder 指定的顺序将列表排序之前，Sorted 属性必须设置为 True。


SortKey、SortOrder、Sorted 属性、ColumnClick 事件示例

本示例将三个 ColumnHeader 对象添加到 ListView 控件中，并将 BIBLIO.MDB 数据库的 Publishers 记录植入控件。一个由两个 OptionButton 控件组成的数组提供将记录排序的两个选项。单击 ColumnHeader 将根据由 OptionButtons 决定的 SortOrder 属性将 ListView 控件排序。要试用此例，请将一个 ListView 和一个由 OptionButton 控件组成的控件数组放置在窗体上，并将代码粘贴到窗体的声明部分。运行示例并单击 ColumnHeaders 进行排序，单击 OptionButton 来切换 SortOrder 属性。

注意   必须使用“工具”菜单的“引用”命令添加 Microsoft DAO 3.0 对象库的引用，否则示例无法运行。

Private Sub Option1_Click(Index as Integer)

'这些 OptionButtons 提供两种选择：升序（索引 0），

'和降序(索引 1)。请单击其一

'为 ListView 控件设置 SortOrder。

ListView1.SortOrder = Index

ListView1.Sorted = True '将列表排序。

End Sub

Private Sub Form_Load()

'为 ColumnHeader 对象创建对象变量。

Dim clmX As ColumnHeader

'添加 ColumnHeaders。列宽度等于控件宽度

'除以 ColumnHeader 对象的数目。

Set clmX = ListView1.ColumnHeaders. _

Add(, , "Company", ListView1.Width / 3)

Set clmX = ListView1.ColumnHeaders. _

Add(, , "Address", ListView1.Width / 3)

Set clmX = ListView1.ColumnHeaders. _

Add(, , "Phone", ListView1.Width / 3)

ListView1.BorderStyle = ccFixedSingle '设置 BorderStyle 属性。

ListView1.View = lvwReport '设置 View 属性为报表型。

'用 SortOrder 选项标注 OptionButton 控件。

Option1(0).Caption = "Ascending (A-Z)"

Option1(1).Caption = "Descending (Z-A)"

ListView1.SortOrder = 0 '设置为图标视图

'为数据访问对象创建对象变量。

Dim myDb As Database, myRs As Recordset

'设置数据库为 BIBLIO.MDB 数据库。

Set myDb = DBEngine.Workspaces(0).OpenDatabase("BIBLIO.MDB")

'设置 recordset 为 Publishers 表。

Set myRs = myDb.OpenRecordset("Publishers", dbOpenDynaset)

'为添加 ListItem 对象创建变量。

Dim itmX As ListItem

'若当前记录不是最后一条记录，则添加 ListItem 对象。

'ListItem 对象的文本使用 Name 字段。

'ListItem 对象的 subitem(1) 使用 Address 字段。

'ListItem 对象的 subitem(2) 使用 Phone 字段。

While Not myRs.EOF

Set itmX = ListView1.ListItems.Add(, , CStr(myRs!Name))

'若 Address 字段不为空，则设置 subitem 1 为此字段。

If Not IsNull(myRs!Address) Then

itmX.SubItems(1) = CStr(myRs!Address)  'Address 字段。

End If

'若 Phone 字段不为空，则设置 subitem 2 为此字段。

If Not IsNull(myRs!Telephone) Then

itmX.SubItems(2) = myRs!Telephone  'Phone 字段。

End If

myRs.MoveNext	'移动到下一条记录。

Wend

End Sub

Private Sub ListView1_ColumnClick(ByVal ColumnHeader As ColumnHeader)

'单击 ColumnHeader 对象时，将根据

'那一列的子项目把 ListView 控件排序。

'设置 SortKey 为 ColumnHeader 的索引值减 1

ListView1.SortKey = ColumnHeader.Index - 1

'设置 Sorted 为 True 以将列表排序。

ListView1.Sorted = True

End Sub


SubItemIndex 属性

返回与 ListView 控件中 ColumnHeader 对象关联的子项目的索引。

语法

object.SubItemIndex [= integer]]

SubItemIndex 属性的语法包含下面部分：

部分	描述
object	对象表达式，其值是 ColumnHeader 对象。
integer	整数，它指定与 ColumnHeader 对象关联的子项目的索引。
说明

子项目是字符串数组，代表显示在报表视图中的 ListItem 对象的数据。

第一列的列标头总有一个 SubItemIndex 属性设置为 0，这是因为小图标和 ListItem 对象的文字总出现在第一列中，而且它们被当作 ListItem 对象而不是子项目。

列标头数目取决于子项目数目。列标头数目总是比子项目数目多 1。


SubItemIndex 属性示例

本示例添加三个 ColumnHeader 对象到 ListView 控件中。然后代码添加若干 ListItem 和 Subitems 并使用 SubItemIndex 将 SubItems 字符串与正确的 ColumnHeader 对象关联。要试用此例，请将 ListView 控件放置在窗体上，并将代码粘贴到窗体的声明部分。运行示例。

'确保 ListView 控件的 view 属性为报表视图。

ListView1.View = lvwReport

'添加三列。

ListView1.ColumnHeaders.Add , "Name", "Name"

ListView1.ColumnHeaders.Add , "Address", "Address"

ListView1.ColumnHeaders.Add , "Phone", "Phone"

'向控件添加 ListItem 对象。

Dim itmX As ListItem

'添加 column 1 的名称。

Set itmX= ListView1.ListItems.Add(1, "Mary", "Mary")

'使用 SubItemIndex 将 SubItem 与正确的

' ColumnHeader 关联。使用关键字 ("Address") 指定正确的

' ColumnHeader。

itmX.SubItems(ListView1.ColumnHeaders("Address").SubItemIndex) _

= "212 Grunge Street"

'使用 ColumnHeader 关键字将 SubItems 字符串与

'正确的 ColumnHeader 关联。

itmX.SubItems(ListView1.ColumnHeaders("Phone").SubItemIndex) _

= "555-1212"

Set itmX = ListView1.ListItems.Add(2, "Bill", "Bill")

itmX.SubItems(ListView1.ColumnHeaders("Address").SubItemIndex) _

= "101 Pacific Way"

itmX.SubItems(ListView1.ColumnHeaders("Phone").SubItemIndex) _

= "555-7879"

Set itmX= ListView1.ListItems.Add(3, "Susan", "Susan")

itmX.SubItems(ListView1.ColumnHeaders("Address").SubItemIndex) = _

"800 Chicago Street"

itmX.SubItems(ListView1.ColumnHeaders("Phone").SubItemIndex) = _

"555-4537"

Set itmX= ListView1.ListItems.Add(4, "Tom", "Tom")

itmX.SubItems(ListView1.ColumnHeaders("Address").SubItemIndex) _

= "200 Ocean City"

itmX.SubItems(ListView1.ColumnHeaders("Phone").SubItemIndex) = _

"555-0348"


View 属性（ListView 控件）

返回或设置 ListView 控件中 ListItem 对象的外观。

语法

object.View [= value]

View 属性的语法包含下面部分：

部分	描述
object	对象表达式，其值是 ListView 控件。
value	指定控件外观的整数或常数，如“设置值”中所描述。
设置值

value 的设置值为：

常数	值	描述
lvwIcon	0	（缺省）图标。每个 ListItem 对象由整幅（标准）的图标和文本标签代表。
lvwSmallIcon	1	小图标。每个 ListItem 对象由小图标及其右侧的文本标签代表。项目水平排列。
lvwList	2	列表。每个 ListItem 对象由小图标及其右侧的文本标签代表。ListItem 对象及其相关的信息在列中垂直排列。
lvwReport	3	报表。每个 ListItem 对象显示为小图标和文本标签。可在子项目中提供关于每个 ListItem 对象的附加信息。图标、文本标签和信息显示在列中，其中最左侧一列包含小图标和文本标签。附加列显示每个项目的子项目的文本。
说明

只有在图标视图中才可使用 LabelWrap 属性指定在显示 ListItem 对象的标签时是否可以换行。

在报表视图中，可通过设置 HideColumnHeaders 属性为 True 来隐藏列标头。也可使用 ColumnClick 事件和 Sorted、SortOrder、SortKey 属性实现当用户单击列标头时对 ListItem 对象或子项目排序的目的。还可通过拖动列标头的右边框到适当的位置来变更列的宽度。


FindItem 方法（ListView 控件）

查找并返回 ListView 控件中 ListItem 对象的引用。

语法

object.FindItem (string, value, index, match)

FindItem 方法的语法包含下面部分：

部分	描述
object	必需的。对象表达式，其值是 ListView 控件。
string	必需的。指定欲查找的 ListItem 对象的字符串表达式。
value	可选的。整数或常数，它指定字符串是否与 ListItem 对象的 Text、Subitems 及 Tag 属性相匹配，如设置值中所描述。
index	可选的。唯一标识对象集合成员并指定搜索起始位置的整数或字符串。若为整数，其值为 Index 属性值；若为字符串，其值为 Key 属性值。未指定索引时缺省索引为 1。
match	可选的。指定项目的 Text 属性与字符串怎样匹配的整数或常数，如“设置值”中所描述。
设置值

value 的设置值为：

常数	值	描述
lvwText	0	（缺省）将字符串与 ListItem 对象的 Text 属性相匹配。
lvwSubitem	1	将字符串与 ListItem 对象的 SubItems 属性相匹配。
lvwTag	2	将字符串与 ListItem 对象的 Tag 属性相匹配。
match 的设置值为：

常数	值	描述
lvwWholeWord	0	（缺省）一个整数或常数，它指定若项目的 Text 属性由所搜索的整字开始时匹配成功。搜索条件非文本时忽略此设置。
lvwPartial	1	一个整数或常数，它指定若项目的 Text 属性由所搜索的字符串开始时匹配成功。搜索条件非字符串时忽略此设置。
说明

如指定文本为搜索条件则可使用 lvwPartial，这样若 ListItem 对象的 Text 属性由所搜索的字符串开始时匹配成功。例如，要查找文本为“Autoexec.bat”的 ListItem，使用下列代码：

'创建 ListItem 变量。

Dim itmX As ListItem

'设置变量来查找项目。

Set itmX = ListView1.FindItem("Auto",,,lvwpartial)


FindItem 方法示例

本示例将 BIBLIO.MDB 数据库中 Publishers 表的内容植入 ListView 控件中。同时也将 FindItem 方法的三个选项植入 ComboBox 控件。一个 CommandButton 包含 FindItem 方法的代码；单击按钮后将提示输入欲搜索的字符串，然后使用 FindItem 方法在 ListView 控件中搜索此字符串。如找到字符串则使用 EnsureVisible 方法滚动控件以显示找到的 ListItem 对象。要试用此例，请将 ListView、ComboBox 及 CommandButton 控件放置在窗体上，并将代码粘贴到窗体的声明部分。运行示例并单击命令按钮。

注意   必须使用“工具”菜单的“引用”命令添加 Microsoft DAO 3.0 对象库的引用，否则示例无法运行。

Private Sub Form_Load()

'为 ColumnHeader 对象创建对象变量。

Dim clmX As ColumnHeader

'添加 ColumnHeaders。列宽度等于控件宽度

'除以 ColumnHeader 对象的数目。

Set clmX = ListView1.ColumnHeaders. _

Add(, , "Company", ListView1.Width / 3)

Set clmX = ListView1.ColumnHeaders. _

Add(, , "Address", ListView1.Width / 3)

Set clmX = ListView1.ColumnHeaders. _

Add(, , "Phone", ListView1.Width / 3)

ListView1.BorderStyle = ccFixedSingle  '设置 BorderStyle 属性。

ListView1.View = lvwReport  '设置 View 属性为报表型。

Command1.Caption = "&FindItem"

'用 FindItem 选项标注 OptionButton 控件。

Option1(0).Caption = "Text"

Option1(1).Caption = "SubItem"

Option1(2).Caption = "Tag"

ListView1.FindItem = 0 '设置 ListView 控件的 FindItem 属性为文本。

End With

'将数据库记录植入 ListView 控件。

'为数据访问对象创建对象变量。

Dim myDb As Database, myRs As Recordset

'设置数据库为 BIBLIO.MDB 数据库。

Set myDb = DBEngine.Workspaces(0).OpenDatabase("BIBLIO.MDB")

'设置 recordset 为 Publishers 表。

Set myRs = myDb.OpenRecordset("Publishers", dbOpenDynaset)

'若当前记录不是最后一条记录，则添加 ListItem 对象。

'使用新对象的引用设置属性。

'设置 Text 属性为 Name 字段 (myRS!Name)。

'设置 SubItem(1) 为 Address 字段 (myRS!Address)。

'设置 SubItem(7) 为 Phone 字段 (myRS!Telephone)。

While Not myRs.EOF

Dim itmX As ListItem	'ListItem 变量。

Dim intCount As Integer	'计数器变量。

'使用 Add 方法添加新的 ListItem 并为新引用设置对象。

'使用引用设置

'属性。

Set itmX = ListView1.ListItems.Add(, , CStr(myRs!Name))

intCount = intCount + 1 'Tag 属性计数器递增。

itmX.Tag = "ListItem " & intCount  '用计数器值设置 Tag。

'若 Address 字段不为空，则设置 subitem 1 为此字段。

If Not IsNull(myRs!Address) Then

itmX.SubItems(1) = CStr(myRs!Address) 'Address 字段。

End If

'若 Phone 字段不为空，则设置 subitem 2 为此字段。

If Not IsNull(myRs!Telephone) Then

itmX.SubItems(2) = myRs!Telephone  'Phone 字段。

End If

myRs.MoveNext	'移动到下一条记录。

Wend

End Sub

Private Sub Command1_Click()

'FindItem 方法。

'创建名为 intSelectedOption 的整数类型变量

'来存储选定按钮的索引。

'创建名为 strFindMe 的字符串变量。使用 InputBox

'把查找的字符串存储在变量中。使用

' FindItem 方法查找字符串。使用 Option1

'切换决定在何处查找的 FindItem 参数。

Dim intSelectedOption as Integer

Dim strFindMe As String

If Option1(0).Value = True then

strFindMe = InputBox("Find in " & Option1(0).Caption)

intSelectedOption = lvwText

End If

If Option1(1).Value = True then

strFindMe = InputBox("Find in " & Option1(1).Caption)

intSelectedOption = lvwSubItem

End If

If Option1(2).Value = True then

strFindMe = InputBox("Find in " & Option1(2).Caption)

intSelectedOption = lvwTag

End If

'FindItem 方法返回找到的项目的引用，所以

'必须创建对象变量并将

'找到的项目设置给它。

Dim itmFound As ListItem	'FoundItem 变量。

Set itmFound = ListView1. _

FindItem(strFindMe, intSelectedOption, , lvwPartial)

'若未找到符合条件的 ListItem 则通知用户并退出。如果

'找到 ListItem，则使用 EnsureVisible 方法滚动控件，

'并选定 ListItem。

If itmFound Is Nothing Then  '若没有匹配成功，则通知用户并退出。

MsgBox "No match found"

Exit Sub

Else

 itmFound.EnsureVisible '滚动 ListView 以显示找到的 ListItem。

 itmFound.Selected = True	'选定ListItem。

'将焦点返回给控件以查看选择。

 ListView1.SetFocus

End If

End Sub

Private Sub ListView1_LostFocus()

'控件失去焦点后，重新将每个

' ListItem 的 Selected 属性设置为 False。

Dim i As Integer

For i = 1 to ListView1.ListItems.Count

ListView1.ListItems.Item(i).Selected = False

Next i

End Sub


GetFirstVisible 方法（ListView 控件）

返回 ListView 控件内部区域中第一个可视 ListItem 对象的引用。

语法

object.GetFirstVisible()

object 所在处代表对象表达式，其值是 ListView 控件。

说明

ListView 控件可包含的 ListItem 对象数目比在其内部区域中可视的 ListItem 对象数目多。可以使用由 GetFirstVisible 方法返回的引用决定在列表或在报表视图中的第一个可视的 ListItem 对象。


GetFirstVisible 方法示例

本示例将 BIBLIO.MDB 数据库 Publishers 表的内容植入 ListView 控件中。单击 CommandButton 控件将显示第一个可视项目的文本。单击列标头以变更 SortKey 属性并再次单击 CommandButton。要试用此例，请将 ListView 和 CommandButton 控件放置在窗体上，并将代码粘贴到窗体的声明部分。

注意   必须使用“工具”菜单的“引用”命令添加 Microsoft DAO 3.0 对象库的引用，否则示例无法运行。

Private Sub Command1_Click()

'创建 ListItem 变量并将变量设置为

'由 GetFirstVisible 方法返回的对象。使用引用

'显示 ListItem 的文本。

Dim itmX As ListItem

Set itmX = ListView1.GetFirstVisible

MsgBox itmX.Text

End Sub

Private Sub Form_Load()

'为 ColumnHeader 对象创建对象变量。

Dim clmX As ColumnHeader

'添加 ColumnHeaders。列宽度等于控件宽度

'除以 ColumnHeader 对象的数目。

Set clmX = ListView1.ColumnHeaders. _

Add(, , "Company", ListView1.Width / 3)

Set clmX = ListView1.ColumnHeaders. _

Add(, , "Address", ListView1.Width / 3)

Set clmX = ListView1.ColumnHeaders. _

Add(, , "Phone", ListView1.Width / 3)

ListView1.BorderStyle = ccFixedSingle '设置 BorderStyle 属性。

'为数据访问对象创建对象变量。

Dim myDb As Database, myRs As Recordset

'设置数据库为 BIBLIO.MDB 数据库。

Set myDb = DBEngine.Workspaces(0).OpenDatabase("BIBLIO.MDB")

'设置 recordset 为 Publishers 表。

Set myRs = myDb.OpenRecordset("Publishers", dbOpenDynaset)

'创建变量以添加 ListItem 对象。

Dim itmX As ListItem

'若当前记录不是最后一条记录，则添加 ListItem 对象。

'ListItem 对象的文本使用 Name 字段。

'ListItem 对象的 subitem(1) 使用 Address 字段。

'ListItem 对象的 subitem(2) 使用 Phone 字段。

While Not myRs.EOF

Set itmX = ListView1.ListItems.Add(, , CStr(myRs!Name))

'若 Address 字段不为空，则设置 subitem 1 为此字段。

If Not IsNull(myRs!Address) Then

itmX.SubItems(1) = CStr(myRs!Address) 'Address 字段。

End If

'若 Phone 字段不为空，则设置 subitem 2 为此字段。

If Not IsNull(myRs!Telephone) Then

itmX.SubItems(2) = myRs!Telephone  'Phone 字段。

End If

myRs.MoveNext	'移动到下一条记录。

Wend

ListView1.View = lvwReport	'设置 view 属性为报表型。

End Sub

Private Sub ListView1_ColumnClick(ByVal ColumnHeader As ColumnHeader)

ListView1.SortKey = ColumnHeader.Index - 1

ListView1.Sorted = True

End Sub


SubItems 属性（ListView 控件）

返回或设置一个字符串（子项目）数组，它代表 ListView 控件中 ListItem 对象的数据。

语法

object.SubItems(index) [= string]

SubItems 属性的语法包含下面部分：

部分	描述
object	对象表达式，其值是 ListItem 对象。
index	标识指定的 ListItem 子项目的整数。
string	描述子项目的文字。
说明

子项目是字符串数组，代表显示在报表视图中 ListItem 对象的数据。例如，它可以显示文件大小及文件的最后修改日期。

ListItem 对象可包含任意数目的关联项目数据字符串（子项目），但每个 ListItem 对象子项目数目必须相同。

每个子项目都定义了相关的列标头。

无法直接向子项目数组添加元素。使用 ColumnHeaders 集合中的 Add 方法添加子项目。


ListView 控件常数

Listview 控件常数

常数	值	描述
lvwIcon	0	（缺省）图标。每个 ListItem 对象由整幅（标准）的图标和文本标签代表。
lvwSmallIcon	1	小图标。每个 ListItem 由小图标及其右侧的文本标签代表。项目水平排列。
LvwList	2	列表。每个 ListItem 由小图标及其右侧的文本标签代表。每个 ListItem 及与其相关的信息垂直排列在各个列中。
lvwReport	3	报表。每个 ListItem 与它的小图标和文本标签一起显示。可以提供关于每个 ListItem 的附加信息。图标、文本标签和信息显示在列中，其中最左侧一列包含小图标，接下来是文本标签。附加列中显示每个项目的子项目的文本。
ListArrange 常数

常数	值	描述
lvwNone	0	（缺省）无。
lvwAutoLeft	1	左对齐。ListItem 对象沿控件左侧对齐。
lvwAutoTop	2	顶对齐。ListItem 对象沿控件顶端对齐。
ListColumnAlignment 常数

常数	值	描述
lvwColumnLeft	0	（缺省）左对齐。文本沿左侧对齐。
lvwColumnRight	1	右对齐。文本沿右侧对齐。
lvwColumnCenter	2	居中。文本居中对齐。
ListLabelEdit 常数

常数	值	描述
lvwAutomatic	0	（缺省）自动。单击选定节点的标签时触发 BeforeLabelEdit 事件。
lvwManual	1	人工。只有调用 StartLabelEdit 方法时才触发 BeforeLabelEdit 事件。
ListSortOrder 常数

常数	值	描述
lvwAscending	0	（缺省）升序。由字母表首部 (A-Z)、最早的日期或最小的数字开始排序。
lvwDescending	1	降序。由字母表尾部 (Z-A)、最晚的日期或最大的数字开始排序。
ListFindItemWhere 常数

常数	值	描述
lvwText	0	（缺省）文本。将字符串与 ListItem 对象的 Text 属性相匹配。
lvwSubItem	1	子项目。将字符串与 ListItem 对象中 SubItems 属性的任意字符串相匹配。
lvwTag	2	标记。将字符串与任意 ListItem 对象的 Tag 属性相匹配。
ListFindItemHow 常数

常数	值	描述
lvwWholeWord	0	（缺省）整字。若项目的 Text 属性是由所搜索的整字开始时，匹配成功。搜索条件非文本时忽略此设置。
lvwPartial	1	部分。若项目的 Text 属性是由所搜索的字符串开始时，匹配成功。搜索条件非文本时忽略此设置。


Sorted 属性（ListView 控件）

返回或设置确定 ListView 控件中的 ListItem 对象是否排序的值。

语法

object.Sorted [= boolean]

Sorted 属性的语法包含下面部分：

部分	描述
object	对象表达式，其值是 ListView 控件。
boolean	指定 ListItem 对象是否排序的布尔表达式，如“设置值”中所描述。
设置值

boolean 的设置值为：

设置值	描述
True	根据 SortOrder 属性，列表项目按字母顺序排序。
False	列表项目不排序。
说明

欲使 SortOrder 和 SortKey 属性的设置值生效，必须将 Sorted 属性设置为 True。

每当 ListItem 坐标变更时 Sorted 属性都将设置为 False。


ItemClick 事件

单击 ListView 控件中 ListItem 对象时事件发生。

语法

Private Sub object_ItemClick(ByVal Item As ListItem)

ItemClick 事件的语法包含下面部分：

部分	描述
object	对象表达式，其值是 ListView 控件。
listitem	被单击的 ListItem 对象。
说明

使用此事件决定单击了哪个 ListItem。此事件在 Click 事件之前触发。鼠标单击 ListView 控件的任何部分时触发标准的 Click 事件。只有当鼠标单击 ListItem 对象的文本或图象时才触发 ItemClick 事件。


ItemClick 事件示例

本示例将 BIBLIO.MDB 数据库 Publishers 表的内容植入 ListView 控件。单击 ListItem 对象时，代码检查 Index 属性值。若此属性值小于 15 则不发生任何事情。若属性值大于 15，ListItem 对象将变成幻影。要试用此例，请将 ListView 控件放置在窗体上，并将代码粘贴到窗体的声明部分。运行示例并单击某个项目。

Private ListView1_ItemClick(ByVal Item As ListItem)

Select Case Item.Index

Case Is = <15

Exit Sub

Case Is => 15

'切换 Ghosted 属性。

Item.Ghosted = Abs(Item.Ghosted) - 1

End Select

End Sub

Private Sub Form_Load()

'为 ColumnHeader 对象创建对象变量。

Dim clmX As ColumnHeader

'添加 ColumnHeaders。列宽度等于控件宽度

'除以 ColumnHeader 对象的数目。

Set clmX = ListView1.ColumnHeaders. _

Add(, , "Company", ListView1.Width / 3)

Set clmX = ListView1.ColumnHeaders. _

Add(, , "Address", ListView1.Width / 3)

Set clmX = ListView1.ColumnHeaders. _

Add(, , "Phone", ListView1.Width / 3)

ListView1.BorderStyle = ccFixedSingle '设置 BorderStyle 属性。

'为数据访问对象创建对象变量。

Dim myDb As Database, myRs As Recordset

'设置数据库为 BIBLIO.MDB 数据库。

Set myDb = DBEngine.Workspaces(0).OpenDatabase("BIBLIO.MDB")

'设置 recordset 为 Publishers 表。

Set myRs = myDb.OpenRecordset("Publishers", dbOpenDynaset)

'创建变量以添加 ListItem 对象。

Dim itmX As ListItem

'若当前记录不是最后一条记录，则添加 ListItem 对象。

'ListItem 对象的文本使用 Name 字段。

'ListItem 对象的 subitem(1) 使用 Address 字段。

'ListItem 对象的 subitem(2) 使用 Phone 字段。

While Not myRs.EOF

Set itmX = ListView1.ListItems.Add(, , CStr(myRs!Name))

'如 Address 字段不为空，则设置 subitem 1 为此字段。

If Not IsNull(myRs!Address) Then

itmX.SubItems(1) = CStr(myRs!Address) 'Address 字段。

End If

'如 Phone 字段不为空，则设置 subitem 2 为此字段。

If Not IsNull(myRs!Telephone) Then

itmX.SubItems(2) = myRs!Telephone  'Phone 字段。

End If

myRs.MoveNext '移动到下一条记录。

Wend

ListView1.View = lvwReport	'设置 View 属性为报表型。

End Sub

Private Sub ListView1_ColumnClick(ByVal ColumnHeader As ColumnHeader)

ListView1.SortKey = ColumnHeader.Index - 1

ListView1.Sorted = True

End Sub


ProgressBar 控件

ProgressBar 控件通过从左到右用一些方块填充矩形来表示一个较长操作的进度。

语法

ProgressBar

说明

•	ProgressBar 控件监视操作完成的进度。

ProgressBar 控件有一个行程和一个当前位置。行程代表该操作的整个持续时间。当前位置则代表应用程序在完成该操作过程时的进度。Max 和 Min 属性设置了行程的界限。Value 属性则指明了在行程范围内的当前位置。由于使用方块来填充控件，因此所填充的数量只能是接近于 Value 属性的当前设置值。基于控件的大小，Value 属性决定何时显示下一个方块。

ProgressBar 控件的 Height 属性和 Width 属性决定所填充控件的方块的数量和大小。方块数量越多，控件就越能精确地描述操作进度。为了增加显示方块的数量，需要减少控件的 Height 或者增加其 Width。BorderStyle 属性的设置值同样影响方块的数量和大小。为了适应边框要求，方块的大小要更小一点。

可以用 ProgressBar 控件的 Align 属性把它自动定位在窗体的顶部或底部。

提示   缩小方块的大小直到其所表示的进度增加量与实际进度值达到最接近的匹配程度，应使 ProgressBar 控件的宽度至少是其长度的 13 倍。

下面的示例说明如何用一个名为 ProgressBar1 的 ProgressBar 控件，来表示对一个大数组冗长的操作进度。把一个 CommandButton 控件和一个 ProgressBar 控件放在同一窗体里。示例代码中的 Align 属性把 ProgressBar 控件定位在沿着窗体的底部。该 ProgressBar 不显示任何文本。

Private Sub Command1_Click()

Dim Counter As Integer

Dim Workarea(250) As String

ProgressBar1.Min = LBound(Workarea)

ProgressBar1.Max = UBound(Workarea)

ProgressBar1.Visible = True

'设置进度的值为 Min。

ProgressBar1.Value = ProgressBar1.Min

'在整个数组中循环。

For Counter = LBound(Workarea) To UBound(Workarea)

'设置数组中每项的初始值。

Workarea(Counter) = "Initial value" & Counter

ProgressBar1.Value = Counter

Next Counter

ProgressBar1.Visible = False

ProgressBar1.Value = ProgressBar1.Min

End Sub

Private Sub Form_Load()

ProgressBar1.Align = vbAlignBottom

ProgressBar1.Visible = False

Command1.Caption = "Initialize array"

End Sub

发行注意   ProgressBar 控件是 ActiveX 控件组的组成，该控件组可以在文件 COMCTL32.OCX 中找到。要在应用程序中使用 ProgressBar 控件，必须把 COMCTL32.OCX 文件加到该工程中。在发行应用程序时，应把文件 COMCTL32.OCX 安装到 Microsoft Windows 的 System 目录或者 System32 目录下。关于如何把一个 ActiveX 控件加到工程中去的详细信息，请参阅《程序员指南》。


Slider 控件

Slider 控件是包含滑块和可选择性刻度标记的窗口。可以通过拖动滑块，用鼠标单击滑块的任意一侧或者使用键盘移动滑块。

语法

Slider

说明

在选择离散数值或某个范围内的一组连续数值时，Slider 控件十分有用。例如，无需键入数字，通过将滑块移动到刻度标记处，可以用 Slider 对被显示的图象设置大小。要选择某个范围内的数值，需将 SelectRange 属性设置为 True 并对控件编程，这样当按下 SHIFT 键时就可选择范围。

可以水平或者垂直地放置 Slider 控件。

发行注意   为了在应用程序中使用 Slider 控件，必须将 COMCTL32.OCX 文件添加到工程中。在分布应用程序时，应把 COMCTL32.OCX 文件安装到用户的 Microsoft Windows System 或 System32 目录中。关于如何把 ActiveX 控件添加到工程的详细信息，请参阅《程序员指南》。


LargeChange、SmallChange 属性

•	在按下 PAGEUP 键或 PAGEDOWN 键时，或者在用鼠标单击滑块的左侧或右侧时，LargeChange 属性设置滑块刻度移动的数目。

•	在按下左箭头键或右箭头键时，SmallChange 属性设置滑块移动的刻度数目。

语法

object.LargeChange = number

object.SmallChange = number

LargeChange 和 SmallChange 属性的语法包含下面部分：

部分	描述
object	对象表达式，其值是 Slider 控件。
number	长整数，指定滑块移动的刻度数目。
说明

LargeChange 属性缺省值为 5。SmallChange 属性缺省值为 1。


LargeChange、SmallChange 属性示例

本示例将 TextBox 控件宽度和 Slider 控件宽度相匹配。当 Slider 控件的 Value 属性超过某个给定数值时，TextBox 控件的宽度将与 Slider 控件的数值相匹配。SmallChange 和 LargeChange 属性依赖于 Slider 控件的 Max 属性缺省值。要试用此例，将 Slider 控件和 TextBox 控件放置于窗体上，并将代码粘贴到窗体的声明部分。运行示例并按 PAGEDOWN 键，PAGEUP 键，左箭头键及右箭头键。

Private Sub Form_Load()

Text1.Width = 4500 '设置 TextBox 的最小宽度。

Slider1.Left = Text1.Left '使 Slider 与 TextBox 对齐。

'将 Slider 的宽度与 TextBox 的宽度匹配。

Slider1.Max = Text1.Width

'在稍靠 Textbox 下方放置 Slider。

Slider1.Top = Text1.Top + Text1.Height + 50

'设置 TickFrequency 为 Max 数值的一部分。

Slider1.TickFrequency = Slider1.Max * 0.1

'设置 LargeChange 和 SmallChange 数值为 Max 的一部分。

Slider1.LargeChange = Slider1.Max * 0.1

Slider1.SmallChange = Slider1.Max * 0.01

End Sub

Private Sub Slider1_Change()

'如果 slider 数值小于 textbox 的 1/3，不做变更。

'否则，将 textbox 的宽度与 Slider 的数值匹配。

If Slider1.Value > Slider1.Max / 3 Then

Text1.Width = Slider1.Value

End If

End Sub


Orientation 属性（Slider 控件）

设置一值由此确定是水平放置还是垂直放置 Slider 控件。

语法

object.Orientation = number

Orientation 属性的语法包含下面部分：

部分	描述
object	对象表达式，其值是 Slider 控件。
number	指定方向的常数或数值，在“设置值”中有详细描述。
设置值

number 的设置值是：

常数	值	描述
sldHorizontal	0	（缺省）水平。滑块水平移动，刻度标记可以放置在顶端或底端，也可以两端都放置或者都不放置。
sldVertical	1	垂直。滑块垂直移动，刻度标记可以放置在左侧或右侧，也可以左右侧都放置或者都不放置。


Orientation 属性示例

本示例转换窗体上 Slider 控件的方向。要试用此例，将 Slider 控件放置在窗体上并将代码粘贴到窗体的声明部分，然后运行此例。单击窗体以转换 Slider 控件的方向。

Private Sub Form_Click()

If Slider1.Orientation = 0 Then

Slider1.Orientation = 1

Else

Slider1.Orientation = 0

End If

End Sub


Scroll 事件（Slider 控件）

当单击控件或使用键盘命令移动 Slider 控件上的滑块时，该事件发生。

语法

Private Sub object_Scroll( )

object 所在处表示一个对象表达式，其值是 Slider 控件。

说明

Scroll 事件发生在 Click 事件之前。

在滑块移动时，Scroll 事件连续返回 Value 属性的数值。可以使用这个事件进行计算以操作那些控件，它们必须与 Slider 控件上发生的变更相协调。与此相对照的是，在 Slider 控件的 Value 属性已经变更之后，希望更新只发生一次，使用 Change 事件。

注意   在这个事件中，避免使用 MsgBox 语句或函数。


SelectRange 属性

设置一值，决定 Slider 控件是否能够具有选择出的范围。

语法

object.SelectRange = boolean

SelectRange 属性的语法包含下面部分：

部分	描述
object	对象表达式，其值是 Slider 控件。
boolean	布尔表达式，它决定 Slider 是否可以具有选择出的范围，此范围如“设置值”中所描述。
设置值

boolean 的设置值是：

设置值	描述
True	Slider 可以具有选择出的范围。
False	Slider 不可以具有选择出的范围。
说明

如果将 SelectRange 设置为 False，则 SelStart 属性的设置值与 Value 属性的设置值相同。设置 SelStart 属性也会改变 Value 属性，反之亦然，这可从控件上滑块的位置反映出来。在 SelectRange 属性为 False 时，设置 SelLength 无效。


SelectRange 属性示例

本示例允许在按住 SHIFT 键时选择范围。要试用此例，将 Slider 控件放置在窗体上，并将代码粘贴到窗体的声明部分。运行此例，按住 SHIFT 键，用鼠标拖动或单击 Slider 控件以选择范围。

Private Sub Form_Load()

'设置 slider 控件的设置值

Slider1.Max = 20

End Sub

Private Sub Slider1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)

If Shift = 1 Then 	'如果按住 Shift 键，则

Slider1.SelectRange = True 	'打开 SelectRange。

Slider1.SelStart = Slider1.Value  '设置 SelStart 数值

Slider1.SelLength = 0 '设置先前的 SelLength（如存在）为 0。

End If

End Sub

Private Sub Slider1_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single)

If Shift = 1 Then

'如果在一点决定返回上一步，将发生错误。

On Error Resume Next

'否则使用 SelStart 和当前数值设置 SelLength。

Slider1.SelLength = Slider1.Value - Slider1.SelStart

Else

Slider1.SelectRange = False '如果松开 SHIFT 键。

End If

End Sub


SelLength、 SelStart 属性（Slider 控件）

•	SelLength 返回或设置 Slider 控件中选择出的范围长度。

•	SelStart 返回或设置 Slider 控件中选择出的范围起点。

语法

object.SelLength [= value]

object.SelStart [= value]

SelLength 和 SelStart 属性的语法包含下面部分：

部分	描述
object	对象表达式，其值是 Slider 控件。
value	Min 和 Max 属性中的数值。
说明

SelLength 和 SelStart 属性一起使用，可以在 Slider 控件上选择某一范围内的连续数值。于是，Slider 控件还具有进一步的优势，它可以在直观上模拟可能的取值范围。

SelLength 属性不能小于 0，SelLength 与 SelStart 之和不能大于 Max 属性。


SelLength、 SelStart 属性示例

本示例在 Slider 控件上选择范围。要试用此例，将 Slider 控件放置在具有三个 TextBox 控件的窗体上，它们的名称分别为 Text1、Text2、和 Text3。Slider 控件的 SelectRange 属性必须设置为 True。将代码粘贴到窗体的声明部分，运行此例。在按住 SHIFT 键时，可以在滑块上选择范围，并在文本框中显示各种数值。

Private Sub Form_Load()

'确保 SelectRange 为 True，以使选择得以进行。

Slider1.SelectRange = True

End Sub

Private Sub Slider1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)

If Shift = 1 Then '如果按住 SHIFT 键，则开始范围选择。

Slider1.ClearSel	'清除所有先前的选择。

Slider1.SelStart = Slider1.Value

Text2.Text = Slider1.SelStart   '在文本框中显示

'范围的起点。

Else

Slider1.ClearSel	'清除所有先前的选择。

End If

End Sub

Private Sub Slider1_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single)

'当按住 SHIFT 键而 SelectRange 为 True 时，

'此事件被触发。

If Shift = 1 And Slider1.SelectRange = True Then

'确保当前数值比 SelStart 大，否则

'将发生错误— SelLength 不可为负。

If Slider1.Value >= Slider1.SelStart Then

Slider1.SelLength = Slider1.Value - Slider1.SelStart

Text1.Text = Slider1.Value  '为了看到范围的终点。

'Text3 是终点与起点数值的差。

Text3.Text = Slider1.SelLength

End If

End If

End Sub


TickFrequency 属性

返回或设置 Slider 控件刻度标记的频率，此频率与其范围有关。例如，如果范围为 100，而 TickFrequency 属性设置为 2，则在范围中每隔两个增量设置一个刻度。

语法

object.TickFrequency [= number]

TickFrequency 属性的语法包含下面部分：

部分	描述
object	对象表达式，其值是 Slider 控件。
number	数值表达式，它指定刻度标记的频率。


TickFreqency 属性示例

本示例将 TextBox 控件的宽度与 Slider 控件的宽度相匹配。当 Slider 控件的 Value 属性超过某个给定的数值时，TextBox 控件的宽度将与 Slider 控件的数值相匹配。TickFrequency 依赖于 Slider 控件的 Max 属性值。要试用此例，将 Slider 和 TextBox 控件放置于窗体上，并将代码粘贴到窗体的声明部分。运行此例并单击滑块数次。

Private Sub Form_Load()

Text1.Width = 4500 '为 TextBox 设置最小宽度。

Slider1.Left = Text1.Left '使 Slider 与 TextBox 对齐。

'将 Slider 的宽度与 TextBox 匹配。

Slider1.Max = Text1.Width

'将 Slider 置于 Textbox 稍下方。

Slider1.Top = Text1.Top + Text1.Height + 50

'设置 TickFrequency 为 Max 数值的一部分。

Slider1.TickFrequency = Slider1.Max * 0.1

'设置 LargeChange 和 SmallChange 数值为 Max 的一部分。

Slider1.LargeChange = Slider1.Max * 0.1

Slider1.SmallChange = Slider1.Max * 0.01

End Sub

Private Sub Slider1_Change()

'如果 slider 数值小于 textbox 的 1/3，不做变更。

'否则，将 textbox 的宽度与 Slider 的数值相匹配。

If Slider1.Value > Slider1.Max / 3 Then

Text1.Width = Slider1.Value

End If

End Sub


TickStyle 属性

返回或设置 Slider 控件上显示的刻度标记的样式（或者定位）。

语法

object.TickStyle [= number]

TickStyle 属性的语法包含下面部分：

部分	描述
object	对象表达式，其值是 Slider 控件。
number	指定 TickStyle 属性的常数或整数，此属性如“设置值”所描述。
设置值

number 的设置值是：

常数	值	描述
sldBottomRight	0	（缺省）底端／右侧。如果控件放置水平方向，则刻度标记沿 Slider 的底端放置，如果控件沿垂直方向，刻度标记沿其右侧放置。
sldTopLeft	1	顶端/左侧。如果控件沿水平方向，则刻度标记沿 Slider 的顶端放置，如果控件沿垂直方向，则刻度标记沿其左侧放置。
sldBoth	2	全部。刻度标记放置在 Slider 的两侧或顶、底两端。
sldNoTicks	3	无。Slider 上没有刻度标记。


TickStyle 属性示例

本示例允许在下拉列表中查看各种可使用的刻度风格。要试用此例，将 Slider 控件和 ComboBox 控件放置于窗体上。将代码粘贴到窗体的声明部分，然后运行此例。单击 ComboBox 以改变 TickStyle 属性的数值。

Private Sub Form_Load()

With combo1

.AddItem "Bottom/Right"

.AddItem "Top/Left"

.AddItem "Both"

.AddItem "None"

.ListIndex = 0

End With

End Sub

Private Sub combo1_Click()

Slider1.TickStyle = combo1.ListIndex

End Sub


ClearSel 方法

清除 Slider 控件的当前选择。

语法

object.ClearSel

objec 所在处代表一个对象表达式，其值是 Slider 控件。

说明

此方法将 SelStart 属性设置为 Value 属性值并将 SelLength 属性设置为 0。


GetNumTicks 方法

返回在 Slider 控件的 Min 和 Max 属性之间的刻度数目。

语法

object.GetNumTicks

objec 所在处代表一个对象表达式，其值是 Slider 控件。

说明

重置 Min 属性，Max 属性或 TickFrequency 属性以更改刻度的数目。


GetNumTicks 方法示例

本示例首先显示 Slider 控件的当前刻度数目，然后将 Max 属性增加 10。要试用此例，将 Slider 控件放置于窗体上并将代码粘贴到窗体的声明部分。运行此例并单击 Slider 控件以获取刻度数目。每次单击控件都将增加刻度数目。

Private Sub Slider1_Click()

MsgBox Slider1.GetNumTicks

Slider1.Max = Slider1.Max + 10

End Sub


Slider 常数

Orientation 常数

常数	值	描述
sldHorizontal	0	水平方向。
sldVertical	1	垂直方向。
Tickstyle 常数

常数	值	描述
sldBottomRight	0	底端/右侧。如果控件沿水平方向，则刻度标记沿 Slider 的底端放置，如果控件沿垂直方向，则刻度标记沿右侧放置。
sldTopLeft	1	顶端/左侧。如果控件沿水平方向，则刻度标记沿 Slider 的顶端放置，如果控件沿垂直方向，则刻度标记沿左侧放置。
sldBoth	2	全部。刻度标记放置在 Slider 的两侧或顶、底两端。
sldNoTicks	3	无。Slider 上没有刻度标记。


StatusBar 控件

StatusBar 控件提供窗体，该窗体通常位于父窗体的底部，通过这一窗体，应用程序能显示各种状态数据。StatusBar 最多能被分成 16 个 Panel 对象，这些对象包含在 Panels 集合中。

语法

StatusBar

说明

StatusBar 控件由 Panel 对象组成，每一个 Panel 对象能包含文本和/或图片。控制个别面板的外观属性包括 Width、Alignment（文本和图片的）和 Bevel。此外，能使用 Style 属性七个值中的一个自动地显示公共数据，诸如日期、时间和键盘状态等。

在设计时，在 StatusBar 控件的属性页的“窗格”选项卡中设置的值能建立面板并定制它们的外观。在运行时，能重新配置 Panel 对象以反映不同的功能，这些功能取决于应用程序的状态。关于 Panel 对象的属性、事件和方法的详细信息，请参阅“Panel 对象和 Panels 集合”的主题。

StatusBar 控件代表性地显示有关在窗体上查看的对象、对象组件的信息或关系到对象操作的上下文的信息。StatusBar 控件与其它控件如 Toolbar 控件一起，提供建立界面的工具，该界面既经济又含有丰富的信息。

发行注意   StatusBar 控件是自定义控件组的一部分，该控件可在 COMCTL32.OCX 文件中找到。为了在应用程序中使用 StatusBar 控件，必须将 COMCTL32.OCX 文件添加到工程中。当发布应用程序时，请在用户的 Microsoft Windows SYSTEM 目录下安装 COMCTL32.OCX 文件。如何将自定义的控件添加到工程中的详细信息，请参阅《程序员指南》。


StatusBar 控件常数

StatusBar 样式常数

常数	值	描述
sbrNormal	0	正常。StatusBar 被分成面板。
sbrSimple	1	简化。StatusBar 只有一个大面板和简化文本。
面板对齐常数

常数	值	描述
sbrLeft	0	文本靠左。
sbrCenter	1	文本居中。
sbrRight	2	文本靠右。
面板自动调整大小常数

常数	值	描述
sbrNoAutoSize	0	非自动调整大小。
sbrSpring	1	在面板中划分附加空间。
sbrContents	2	符合于目录。
面板斜面常数

常数	值	描述
sbrNoBevel	0	无斜面。
sbrInset	1	斜面插入。
sbrRaised	2	斜面凸起。
面板样式常数

常数	值	描述
sbrText	0	显示文本和/或位图。
sbrCaps	1	显示 Caps Lock 状态。
sbrNum	2	显示 Number Lock 状态。
sbrIns	3	显示 Insert 键状态。
sbrScrl	4	显示 Scroll Lock 状态。
sbrTime	5	以 System 格式显示时间。
sbrDate	6	以 System 格式显示日期。
sbrKana	7	Kana。当激活滚动锁定时，显示黑体字母 KANA，反之当停用滚动锁定时，则显示暗淡的字母 KANA。


Panels 集合

Panels 集合包含 Panel 对象的集合。

语法

statusbar.Panels(index)

Panels 集合的语法有下列部分。

部分	描述
statusbar	对象表达式，其值是 StatusBar 控件。
Index	在集合中唯一定义对象的整数或字符串。整数是 Index 属性的值，字符串是 Key 属性值，这些属性是要求的 Panel 对象的属性。
Panels 集合是 Panel 对象的基于 1 的数组。按照缺省规定，在 StatusBar 控件上有一个 Panel 对象。因此，如果想要建立三个面板，则只需要在 Panels 集合中添加两个对象。

Panels 属性返回对 Panels 集合的引用。

为了将 Panel 对象添加到集合中，在运行时对 Panel 对象使用 Add 方法，或在设计时 StatusBar 控件属性页的“窗格”选项卡。

集合中的每一项都能被它的 Index 属性或 Key 属性访问。例如，为了在集合中获得对第三个 Panel 对象的引用，请用下面的语法：

Dim pnlX As Panel

Set pnlX = StatusBar1.Panels(3)	'用索引号引用。

'或

Set pnlX = StatusBar1.Panels("Third")	'用唯一键引用。

'或

Set pnlX = StatusBar1.Panels.Item(3)	'用 Item 方法。


Panel 对象

Panel 对象表示在 Panels 集合中的一个单独的面板，该集合属于 StatusBar 控件。

说明

Panel 对象能包含文本和位图，它们可用于反映应用程序的状态。

为了检索、添加或移动单独的 Panel 对象，可用 Panels 集合。

为了更改面板的锁定，可更改 Panel 对象的属性。为了在设计时修改属性，可以在属性页的“窗格”选项卡中更改 Panel 对象的属性。在运行时，可以用代码更改 Panel 对象的属性。


Add 方法（Panels 集合）

将 Panel 对象添加到 Panels 集合中并返回对新建立的 Panel 对象的引用。

语法

object.Add(index, key, text, style, picture)

Add 方法的语法含有下列部分：

部分	描述
object	对象表达式，其值是 Panels 集合。
index	选项。指定插入 Panel 对象的位置的整数。如果没有指定 index，则将 Panel 添加到 Panels 集合的末端。
key	选项。唯一识别 Panel 的字符串。使用 key 检索指定的 Panel。这相当于添加对象后对该新的 Panel 对象设置 Key 属性。
text	选项。出现在 Panel 中的字符串。这相当于添加对象后，对该新的 Panel 对象设置 Text 属性。
style	选项。面板的样式。在 Style 属性（Panel 对象）中详述了可用的样式。这相当于添加对象后对该新的 Panel 对象设置 Style 属性。
picture	选项。指定显示在活动的 Panel 中的位图。详细信息，请参阅 LoadPicture 函数。这相当于添加对象后对该新的 Panel 对象设置 Picture 属性。
说明

在运行时，Add 方法返回对新插入的 Panel 对象的引用。利用这个引用，能用以下方式对每一个新的 Panel 设置属性：

Dim pnlX As Panel

Dim i As Integer

For i = 1 To 6  '添加六个面板对象。

    '建立一个面板并同时获得对它引用。

    Set pnlX = StatusBar1.Panels.Add(, "Panel" & i) '设置 Key 属性。

    pnlX.Style = i  '设置 Style 属性。

    pnlX.AutoSize = sbrContents '设置 AutoSize 属性。

Next i

当设置 Panel 对象的 Style 属性为 sbrText 时，在 Panel 对象中显示 Text 属性值。

Panels 集合是基于 1 的集合。为了在集合中获得对第一个（缺省）Panel 的引用，可以使用它的 Index 或 Key（如果有一个）属性或 Item 方法。下面的代码用它的索引引用第一个 Panel 对象。

Dim pnlX As Panel

'获得对第一个面板的引用。

Set pnlX = StatusBar1.Panels(1) '用索引

pnlX.Text = "Changed text"	'改变面板对象的文本。

按照缺省规定，在控件上已经存在一个 Panel。因此，将面板添加到集合以后，Count 将比添加的面板数多一个。例如：

Dim i as Integer

For i = 1 to 4  '添加四个面板。

StatusBar1.Panels.Add   '添加没有任何属性的面板。

Next i

MsgBox StatusBar1.Panels.Count   '返回五个面板。


Add 方法（Panels 集合）示例

这个示例用 Add 方法将三个新的 Panel 对象添加到 StatusBar 控件。为了使用该例，将 StatusBar 控件放置在窗体上并将代码粘贴到窗体的声明部分。运行此例。

Private Sub Form_Load()

Dim pnlX As Panel

    '添加空面板作为空格

    Set pnlX = StatusBar1.Panels.Add()

    pnlX.AutoSize = sbrSpring

    pnlX.MinWidth = 1

    '添加含有时钟图标和时间样式的面板。

    Set pnlX = StatusBar1.Panels.Add _

    (, , , sbrTime, LoadPicture("Graphics\icons\misc\clock03.ico"))

    '添加第二个含有位图和日期样式的面板。

    Set pnlX = StatusBar1.Panels.Add _

    (, , , sbrDate, LoadPicture("Graphics\bitmaps\assorted\calendar.bmp"))

    '对最后一个面板对象设置 Bevel 属性。

    pnlX.Bevel = sbrInset   '插入斜面。

    pnlX.Alignment = sbrRight   '对最后一个对象设置 Alignment 属性。

    '对第一个（缺省）Panel 对象设置 Text 和 AutoSize 属性。

    StatusBar1.Panels(1).Text = "Add Panel Example"

    StatusBar1.Panels(1).AutoSize = sbrContents

End Sub


Alignment 属性（Panel 对象）

返回或设置文本在 Panel 对象的标题中的对齐方式，该对象在 StatusBar 控件中。

语法

object.Alignment [= number]

Alignment 属性的语法包含有下列部分：

部分	描述
object	对象表达式，其值是 Panel 对象。
number	如在“设置值”中描述的那样，指定操作类型的常数或值。
设置值

number 的设置值是：

常数	值	描述
sbrLeft	0	（缺省）。文本左对齐于位图的右边。
sbrCenter	1	文本居中且位于位图的右边。
sbrRight	2	文本右对齐于位图的左边。
说明

如在设置值中描述的那样，Alignment 属性指定位图的位置以及文本的位置。在面板内部，没有任何方法独立为位图定位。


Alignment 属性（Panel 对象）示例

这个示例将两个 Panel 对象添加到 StatusBar 控件中，并且在每个面板中用三种可用样式中的一种对齐文本。要试用此例，在窗体上放置 StatusBar 控件并将代码粘贴到该窗体的声明部分。运行此例。

Private Sub Form_Load()

    '声明变量。

    Dim pnlX As Panel

    Dim I As Integer

    For I = 1 To 2  '添加两个面板。

      StatusBar1.Panels.Add

    Next I

    For I = 1 To 3  '为每个面板添加图片。

      Set pnlX = StatusBar1.Panels(I)

      Set pnlX.Picture = LoadPicture("Graphics\icons\comm\net12.ico")

'设置自动调整大小和最小宽度，以便面板

'总是处在视野中。

      pnlX.AutoSize = sbrSpring

      pnlX.MinWidth = 1

    Next I

    '设置样式和对齐方式。

    With StatusBar1.Panels

      .Item(1).Text = "Left"

      .Item(1).Alignment = sbrLeft '左对齐方式。

      .Item(2).Text = "Center"

      .Item(2).Alignment = sbrCenter '居中对齐方式。

      .Item(3).Text = "Right"

      .Item(3).Alignment = sbrRight '右对齐方式。

End With

End Sub


AutoSize 属性（Panel 对象)

调整了 StatusBar 控件的大小以后，返回或设置确定 Panel 对象宽度的值。

语法

object.AutoSize [= number]

AutoSize 属性的语法含有下列部分：

部分	描述
object	对象表达式，其值是 Panel 对象。
number	如设置值中描述的那样，指定操作类型的常数或值。
设置值

number 的设置值是：

常数	值	描述
sbrNoAutoSize	0	（缺省）无。没有自动调整大小出现。Panel 的宽度总是并且准确地由 Width 属性指定。
sbrSpring	1	弹回。当父窗体调整大小并且有附加的可用空间时，所有具有这种设置的父窗体划分空间并相应地增长。但是，面板的宽度决不会低于 MinWidth 属性指定的宽度。
sbrContents	2	目录。调整 Panel 大小以适合它的目录，但是，它的宽度决不会低于 MinWidth 属性指定的宽度。
说明

含有目录样式的 Panel 对象优先于含有弹回样式的 Panel 对象。这就意味着如果含有 Contents 样式的 Panel 需要空间，则将缩短 Spring 样式的 Panel。


AutoSize 属性（Panel 对象）示例

这个示例将两个 Panel 对象添加到 StatusBar 控件中，并且对所有的面板设置 AutoSize 属性目录。由于游标在窗体上可遍及对象，因此，对每一个控件都可以显示其 x 和 y 坐标以及 Tag 属性值。要试用此例，将 StatusBar、PictureBox 和 CommandButton 放置在窗体上，然后将代码粘贴到声明部分。运行此例并且移动游标到各个控件。

Private Sub Form_Load()

Dim pnlX As Panel

'为每一个控件设置长标记。

Form1.Tag = "Project 1 Form"

Command1.Tag = "A command button"

Picture1.Tag = "Picture Box Caption"

StatusBar1.Tag = "Application StatusBar1"

'将第一个面板的自动调整大小样式设置为目录。

StatusBar1.Panels(1).AutoSize = sbrContents

'添加多于两个的面板，并将它们设置为目录。

Set pnlX = StatusBar1.Panels.Add

pnlX.AutoSize = sbrContents

Set pnlX = StatusBar1.Panels.Add

pnlX.AutoSize = sbrContents

End Sub

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)

'在面板 1 中显示控件的标记并在面板 2 和 3 中显示 x、y

'坐标。因为 AutoSize = Contents，

'第一个面板展宽以适应变化的文本。

StatusBar1.Panels(1).Text = Form1.Tag

StatusBar1.Panels(2).Text = "X = " & x

StatusBar1.Panels(3).Text = "Y = " & y

End Sub

Private Sub Command1_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)

StatusBar1.Panels(1).Text = Command1.Tag

StatusBar1.Panels(2).Text = "X = " & x

StatusBar1.Panels(3).Text = "Y = " & y

End Sub

Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)

StatusBar1.Panels(1).Text = Picture1.Tag

StatusBar1.Panels(2).Text = "X = " & x

StatusBar1.Panels(3).Text = "Y = " & y

End Sub

Private Sub StatusBar1_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)

StatusBar1.Panels(1).Text = StatusBar1.Tag

StatusBar1.Panels(2).Text = "X = " & x

StatusBar1.Panels(3).Text = "Y = " & y

End Sub


Bevel 属性（Panel 对象)

返回或设置 Panel 对象的斜面样式，该对象属于 StatusBar 控件。

语法

object.Bevel [= value]

Bevel 属性的语法含有下列部分：

部分	描述
object	对象表达式，其值是 Panel 对象。
value	如同在设置值中描述的那样，确定斜面样式的常数或值。
设置值

value 的设置值是：

常数	值	描述
sbrNoBevel	0	无。Panel 没有显示斜面，但文本看起来好象是将它显示在状态栏的右边。
sbrInset	1	（缺省）。插入。Panel 似乎沉入到状态栏中。
sbrRaised	2	凸起。Panel 似乎凸出在状态栏上。


Bevel 属性（Panel 对象）示例

这个示例将两个 Panel 对象添加到 StatusBar 控件中，然后给每个 Panel 以不同的斜面样式。为了使用该示例，将 StatusBar 控件放置在窗体上然后将代码粘贴到声明部分。运行此例。

Private Sub Form_Load()

Dim pnlX As Panel

Dim I as Integer

For I = 1 to 2

Set pnlX = StatusBar1.Panels.Add() '添加两个面板。

Next I

With StatusBar1.Panels

.Item(1).Style = sbrCaps	'大写锁定

.Item(1).Bevel = sbrInset	'插入

.Item(2).Style = sbrNum	'数字键盘锁定

.Item(2).Bevel = sbrNoBevel	'无斜面

.Item(3).Style = sbrDate	'日期

.Item(3).Bevel = sbrRaised	'凸起的斜面

End With

End Sub


MinWidth 属性

返回或设置 Panel 对象的最小宽度，该对象属于 StatusBar 控件。

语法

object.MinWidth [= value]

MinWidth 属性的语法含有下列部分：

部分	描述
object	对象表达式，其值是 Panel 对象。
value	确定 Panel 对象最小宽度的整数。该值的标尺方式由控件的容器确定。
说明

当 AutoSize 属性被设置为目录或弹回时，使用 MinWidth 属性，以防止面板因自动调整大小被调整到太小的宽度。当 AutoSize 属性被设置为 None 时，MinWidth 属性总是被设定为与 Width 属性相同的值。

缺省值与 Width 属性的缺省相同。value 参数用与父窗体或容器的标尺模式相同的量度单位。


MinWidth 属性示例

这个示例用 StatusBar 控件的缺省面板显示当前日期。设置 MinWidth 属性以便在单击面板时清除日期，但保留面板的大小不变。为了使用该示例，将 StatusBar 控件放置在窗体上，并将代码粘贴到声明部分。运行此例并单击 Panel 对象以清除日期。

Private Sub Form_Load()

    StatusBar1.Panels(1).AutoSize = sbrContents

    StatusBar1.Panels(1).Text = "Today's Date is: " & Str(Now)

    '将最小宽度设置为面板的当前大小。

    StatusBar1.Panels(1).MinWidth = StatusBar1.Panels(1).Width

End Sub

Private Sub StatusBar1_PanelClick(ByVal Panel As ComctlLib.Panel)

    '清除今天的日期但保持大小在最小宽度。

Panel.Text = "Today's Date is: "

End Sub


Panels 属性

返回对 Panel 对象的集合的引用。

语法

object.Panels

object 所在处表示对象表达式，其值是 StatusBar 控件。


PanelClick 事件

PanelClick 事件类似于标准的 Click 事件，但 PanelClick 事件是在任何一个 Panel 对象上压下，然后释放鼠标按钮时才出现，该对象属于 StatusBar 控件。

语法

Private Sub object_PanelClick(ByVal panel As Panel)

PanelClick 事件的语法含有下列部分：

部分	描述
object	对象表达式，其值是 StatusBar 控件。
panel	对 Panel 对象的引用。
说明

当单击 Panel 时，标准的 Click 事件也出现。

仅当单击出现在 Panel 对象上时，才生成 PanelClick 事件。当设置 StatusBar 控件的 Style 属性为 Simple 样式时，隐藏面板，此时不生成 PanelClick 事件。

能使用对 Panel 对象的引用来对它设置属性。例如，下面的代码重新设置被单击的 Panel 的 Bevel 属性：

Private Sub StatusBar1_PanelClick(ByVal Panel As Panel)

Select Case Panel.Key

Case "DisplayFileName" 'Key=“显示文件名”

  Panel.Bevel = sbrRaised	'重新设置 Bevel 属性

'为其它面板添加其它 case 语句

End Select

End Sub


PanelClick 事件示例

这个示例将两个 Panel 对象添加到 StatusBar 控件中；当单击每一个 Panel 时，在第三个 Panel 中显示被击 Panel 的 Key 和 Width 属性的值。要试用此例，将 StatusBar 控件放置在窗体上，然后将代码粘贴到声明部分。运行此例。

Private Sub Form_Load()

Dim I as Integer

For I = 1 to 2

StatusBar1.Panels.Add

Next I

With StatusBar1.Panels

.Item(1).Style = sbrDate

.Item(1).Key = "Date panel"

.Item(1).AutoSize = sbrContents

.Item(1).MinWidth = 2000

.Item(2).Style = sbrTime

.Item(2).Key = "Time panel"

.Item(3).AutoSize = sbrContents	'目录

.Item(3).Text = "Panel 3"

.Item(3).Key = "Panel 3"

End With

End Sub

Private Sub StatusBar1_PanelClick(ByVal Panel As Panel)

'在面板 3 中显示单击面板的键和宽度。

StatusBar1.Panels("Panel 3").Text = Panel.Key & " Width = " & Panel.Width

End Sub


PanelDblClick 事件

PanelDblClick 事件类似于标准的 DblClick 事件，但 PanelDblClick 事件是两次在 Panel 对象上压下，然后释放鼠标时才出现，该 Panel 对象属于 StatusBar 控件。

语法

Sub object_PanelDblClick(ByVal panel As Panel)

PanelDblClick 事件的语法含有下列部分：

部分	描述
object	对象表达式，其值是 StatusBar 控件。
panel	对双击 Panel 的引用。
说明

当双击 Panel 时，标准的 DblClick 事件也出现。

仅当双击出现在 Panel 对象上时，才生成 PanelDblClick 事件。当设置 StatusBar 控件的 Style 属性为 Simple 样式时，隐藏面板，此时，不生成 PanelDblClick 事件。


PanelDblClick 事件示例

这个示例将两个 Panel 对象添加到 StatusBar 控件中。当双击控件时，显示被击 Panel 对象的文本。要试用此例，将 StatusBar 控件放置在窗体上并将代码粘贴到窗体的声明部分。运行此例并双击控件。

Private Sub Form_Load()

Dim I as Integer

For I = 1 to 2

StatusBar1.Panels.Add

Next I

With StatusBar1.Panels

.Item(1).Text = "A long piece of information."

.Item(1).AutoSize = sbrContents	'目录

.Item(2).Style = sbrDate	'日期样式

.Item(2).AutoSize = sbrContents	'目录

.Item(3).Style = sbrTime	'时间样式

End With

End Sub

Private Sub StatusBar1_PanelDblClick(ByVal Panel As Panel)

MsgBox "Panel.Style = " & Panel.Style

End Sub


SimpleText 属性

当设置 StatusBar 控件的 Style 属性为 Simple 时，返回或设置显示文本。

语法

object.SimpleText [= string]

SimpleText 属性的语法含有下列部分：

部分	描述
object	对象表达式，其值是 StatusBar 控件。
string	当设置 Style 属性为 Simple 时显示的字符串。
说明

StatusBar 控件含有 Style 属性，该属性能在 Simple 和 Normal 样式之间被切换。当用 Simple 样式时，状态栏仅显示一个面板。用 Simple 样式显示的文本与用 Normal 样式的显示文本也不同。该文本用 SimpleText 属性来设置。

SimpleText 属性能用于这种情况，即暂时切换应用程序的操作方式。例如，当下拉一个菜单时，SimpleText 能描述菜单的目的。


SimpleText 属性示例

这个示例将两个 Panel 对象添加到具有 Normal 样式的 StatusBar 控件中，然后添加字符串（用 SimpleText 属性），该字符串在设置 Style 属性为 Simple 时才出现。该控件在 Simple 和 Normal 样式之间切换。要试用此例，将 StatusBar 控件放置在窗体上并将代码粘贴到窗体的声明部分。运行此例并单击 StatusBar 控件。

Private Sub Form_Load()

Dim I As Integer

For I = 1 to 2

StatusBar1.Panels.Add	'添加两个 Panel 对象。

Next I

With StatusBar1.Panels

.Item(1).Style = sbrNum	'Number 锁定

.Item(2).Style = sbrCaps	'Caps 锁定

.Item(3).Style = sbrScrl	'Scroll 锁定

End With

End Sub

Private Sub StatusBar1_Click()

'在简单和正常样式之间切换。

With StatusBar1

If .Style = 0 Then

'当 StatusBar 是用 Simple 样式时，显示该文本。

.SimpleText = "Date and Time: " & Now

.Style = sbrSimple	'Simple 样式。

Else

.Style = sbrNormal	'Normal 样式。

End If

End With

End Sub


Style 属性（StatusBar 控件)

返回或设置 StatusBar 控件的样式。

语法

object.Style [= number]

Style 属性的语法含有下列部分：

部分	描述
object	对象表达式，其值是 StatusBar 控件。
number	如同在设置值中指定的那样，确定 StatusBar 控件外观的整数或常数。
设置值

number 的设置值是：

常数	值	描述
sbrNormal	0	（缺省）。正常。StatusBar 控件显示所有的 Panel 对象。
sbrSimple	1	简单。控件仅显示一个大面板。
说明

StatusBar 能在两种方式：Normal 和 Simple 之间切换。当用 Simple 样式时，StatusBar 仅显示一个面板。其外观也变化：凸出不含边框的斜面样式。这样允许控件有两种外观，这两种外观相互间可分开维护。

根据控件的样式能显示不同的字符串。当设置 Style 属性为 Simple 时，用 SimpleText 属性设置要显示的字符串的文本。

注意   当设置 Style 属性为 Simple 时，StatusBar 控件显示大面板（控件的宽度），该面板不能通过面板集合来控制。


Style 属性（StatusBar 控件）示例

这个示例将两个 Panel 对象添加到具有 Normal 样式的 StatusBar 控件中，然后添加字符串（用 SimpleText 属性），该字符串在设置 Style 属性为 Simple 时才出现。为显示 SimpleText 属性字符串，该控件在 Simple 和 Normal 样式之间切换。要试用此例，将 StatusBar 控件放置在窗体上并将代码粘贴到窗体的声明部分。运行此例并单击 StatusBar 控件。

Private Sub Form_Load()

Dim I As Integer

For I = 1 to 2

StatusBar1.Panels.Add

Next I

With StatusBar1.Panels

.Item(1).Style = sbrDate	'日期

.Item(2).Style = sbrCaps	'Caps 锁定

.Item(3).Style = sbrScrl	'Scroll 锁定

End With

End Sub

Private Sub StatusBar1_Click()

With StatusBar1

If .Style = sbrNormal Then

.SimpleText = Time	'显示时间。

.Style = sbrSimple	'Simple 样式

Else

.Style = sbrNormal	'Normal 样式

End If

End With

End Sub


Style 属性（Panel 对象)

返回或设置 Panel 对象的样式，该对象属于 StatusBar 控件。

语法

object.Style [= number]

Style 属性的语法含有下列部分：

部分	描述
object	对象表达式，其值是 Panel 对象。
number	如同在设置值中描述的那样，指定 Panel 样式的整数或常数。
设置值

number 的设置值是：

常数	值	描述
sbrText	0	（缺省）。文本和/或位图。用 Text 属性设置文本。
sbrCaps	1	Caps Lock 键。当激活 Caps Lock 时，用黑体显示字母 CAPS，反之，当停用 Caps Lock 时，显示暗淡的字母。
sbrNum	2	Number Lock。当激活数字锁定键时，用黑体显示字母 NUM，反之，当停用数字锁定键时，显示暗淡的字母。
sbrIns	3	Insert 键。当激活插入键时，用黑体显示字母 INS。反之，当停用插入键时，显示暗淡的字母。
sbrScrl	4	Scroll Lock 键。当激活滚动锁定时，用黑体显示字母 SCRL，反之，当停用滚动键时，显示暗淡的字母。
sbrTime	5	Time。以系统格式显示当前时间。
sbrDate	6	Date。以系统格式显示当前日期。
sbrKana	7	Kana。当激活滚动锁定时，用黑体显示字母 KANA。反之，当滚动锁定停用时，显示暗淡的字母。
说明

如果将 Style 属性设置为除零（文本和位图）以外的任何样式，则任何以 Text 属性设置的文本将不显示，除非将 Style 属性设置为零。

Style 属性能作为添加到集合中的 Panel 对象而设置。详细信息请参阅 Add 方法。

注意   StatusBar 控件也含有 Style 属性。当设置 StatusBar 控件的 Style 为 Simple 时，该控件仅显示一个大面板和它的字符串（用 SimpleText 属性设置）。


Style 属性（Panel 对象）示例

这个示例用各种样式在 StatusBar 控件上显示数据。要试用此例，将 StatusBar 控件放置在窗体上并将代码粘贴到窗体的声明部分，然后运行此例。

Private Sub Form_Load()

'定义变量。

Dim I as Integer

Dim pnlX as Panel

For I = 1 to 5	'添加五个面板。

Set pnlX = StatusBar1.Panels.Add( )

Next I

'设置每一个面板的样式。

With StatusBar1.Panels

.Item(1).Style = sbrDate 	'日期

.Item(2).Style = sbrTime 	'时间

.Item(3).Style = sbrCaps 	'Caps 锁定

.Item(4).Style = sbrNum	'Number 锁定

.Item(5).Style = sbrIns 	'Insert 键

.Item(6).Style = sbrScrl 	'Scroll 锁定

End With

Form1.Width = 9140 '为显示所有面板加宽窗体。

End Sub


Width 属性（Panel 对象)

返回或设置 Panel 对象的当前宽度，该对象属于 StatusBar 控件。

语法

object.Width[= number]

Width 属性的语法含有下列部分：

部分	描述
object	对象表达式，其值是 Panel 对象。
number	确定 Panel 宽度的整数。
说明

Width 属性总是反映 Panel 的实际宽度并且不能小于 MinWidth 属性。


Width 属性（Panel 对象)示例

这个示例建立三个 Panel 对象并且以不同的值设置它们的 Width 属性。当单击窗体时，重新设置第一个 Panel 的 Width 属性。要试用此例，将 StatusBar 控件放置在窗体上并将代码粘贴到窗体的声明部分。运行此例并单击每一个面板以查看它的宽度。

Private Sub Form_Load()

Dim X As Panel

Dim I as Integer

For I = 1 to 2	'添加两个面板。

Set X = StatusBar1.Panels.Add()

Next I

With StatusBar1.Panels

.Item(1).Text = "Path = " & App.Path

.Item(1).AutoSize = sbrContents	'目录

.Item(1).Width = 2000	'长面板

.Item(2).Text = "Record Field"

.Item(2).AutoSize = sbrSpring	'弹回

.Item(2).Width = 1000	'中间面板

.Item(3).Style = sbrTime	'时间

.Item(3).AutoSize = sbrSpring	'弹回

.Item(3).Width = 500	'中间面板

End With

End Sub

Private Sub Form_Click()

'改变宽度。

StatusBar1.Panels(1). Width = 800

End Sub


Toolbar 控件

Toolbar 控件包含一个 Button 对象集合，该对象被用来创建与应用程序相关联的工具栏。

语法

Toolbar

说明

一般来说，工具栏包含一些按钮，这些按钮与应用程序菜单中各项的按钮对应，工具栏为用户访问应用程序的最常用功能和命令提供了图形接口。

有了 Toolbar 控件，就可以通过将 Button 对象添加到 Buttons 集合中来创建工具栏。每个 Button 对象都可有可选的文本或一幅图象，或者兼而有之，这些都是由相关联的 ImageList 控件提供的。可在一个按钮上用 Image 属性为每个 Button 对象加一幅图象，或用 Caption 属性显示文本，或者二者兼而有之。在设计时可用 Toolbar 控件的属性页将 Button 对象添加到控件中。在运行时可用 Add 和 Remove 方法添加按钮或从 Buttons 集合中删除按钮。

为了给 Toolbar 编程，将代码添加到 ButtonClick 事件中，以便对已选定的按钮作出反应。也可用 Style 属性确定每个 Button 对象的状态和外观。例如，如果已对四个按钮赋以 ButtonGroup 样式，则在任何时候只能按下一个按钮，而且至少总有一个按钮已被按下。

可对 Button 对象赋以 PlaceHolder 样式，然后将控件定位在定位符的上方，从而在工具栏上为其它控件创建空间。例如，在设计时，为将下拉组合框放置在工具栏上，用 PlaceHolder 样式添加一个 Button 对象，并调整其大小使之与 ComboBox 控件一样宽。然后将 ComboBox 控件放置在定位符上。

在运行时双击工具栏后就会调用“自定义工具栏”对话框，有了这个对话框，用户就可隐藏、显示或重新安排工具栏按钮。可用 AllowCustomize 属性来允许或禁用对话框。也可用 Customize 方法调用“自定义工具栏”对话框。如果希望保存或恢复工具栏的状态，或者允许用户这样做，则有两种方法可供使用：SaveToolbar 和 RestoreToolbar 方法。在改动工具栏时产生的 Change 事件一般被用来调用 SaveToolbar 方法。

注意   自定义的对话框也包含帮助按钮。当终端用户单击帮助按钮时，使用 HelpFile 和 HelpContextID 属性来决定显示哪个帮助文件。

通过对每个 Button 对象的 ToolTipText 描述进行编程可进一步增强可用性。为显示工具提示，必须将 ShowTips 属性设置为 True。当用户调用“自定义工具栏”对话框时，单击按钮就会导致在对话框中显示按钮的描述；这种描述可通过设置 Description 属性来编程实现。

发行注意   Toolbar 控件是一组ActiveX 控件的一部分，这组自定义控件可在文件 COMCTL32.OCX 中找到。为在应用程序中使用 Toolbar 控件，必须将文件 COMCTL32.OCX 添加到工程中。在发行应用程序时，应将文件 COMCTL32.OCX 安装到用户的 Microsoft Windows 的SYSTEM 或 System32 ( Windows NT 平台上)的文件夹。关于怎样将一个 ActiveX 控件添加到工程中去的详细信息，请参阅《部件工具指南》中的“加载 ActiveX 控件”。


Toolbar 控件示例

该示例用 Add 方法将 Button 对象添加到 Toolbar 控件中去，并分配 ImageList 控件所提供的图象。每个按钮的状态都由 Style 属性决定。下述代码创建了能够用来打开和保存文件的按钮，并包含了一个用来改变窗体背景的 ComboBox 控件。要试用此例，将 Toolbar 控件，ImageList 控件和 ComboBox 控件放置到窗体上，并把代码粘贴到窗体的声明部分。要确保将 ComboBox 直接插入到 Toolbar 控件上。运行此例，单击不同按钮并从组合框中进行选择。

Private Sub Form_Load()

    '为 ImageList 创建对象变量。

    Dim imgX As ListImage

    '将图片加载到 ImageList 控件中。

    Set imgX = ImageList1.ListImages. _

    Add(, "open", LoadPicture("Graphics\bitmaps\tlbr_w95\open.bmp"))

    Set imgX = ImageList1.ListImages. _

    Add(, "save", LoadPicture("Graphics\bitmaps\tlbr_w95\save.bmp"))

    Toolbar1.ImageList = ImageList1

    '为 Toolbar 创建对象变量。

    Dim btnX As Button

    '用 Add 方法将按钮对象添加到 Buttons 集合中。创建

    '每个按钮后，设置 Description 和 ToolTipText 属性。

    Toolbar1.Buttons.Add , , , tbrSeparator

    Set btnX = Toolbar1.Buttons.Add(, "open", , tbrDefault, "open")

    btnX.ToolTipText = "Open File"

    btnX.Description = btnX.ToolTipText

    Set btnX = Toolbar1.Buttons.Add(, "save", , tbrDefault, "save")

    btnX.ToolTipText = "Save File"

    btnX.Description = btnX.ToolTipText

    Set btnX = Toolbar1.Buttons.Add(, , , tbrSeparator)

    '下一个按钮具有 Placeholder 属性。ComboBox 控件

    '将被放置在按钮的上方。

    Set btnX = Toolbar1.Buttons.Add(, "combo1", , tbrPlaceholder)

    btnX.Width = 1500 '容纳一个 combobox 的占位符宽度。

    Show '显示窗体以继续配置 ComboBox。

    '配置 ComboBox 控件，使其跟具有 PlaceHolder 样式

    '(key = "combo1") 的 Button 对象在相同位置。

    With Combo1

        .Width = Toolbar1.Buttons("combo1").Width

        .Top = Toolbar1.Buttons("combo1").Top

        .Left = Toolbar1.Buttons("combo1").Left

        .AddItem "Black" '为文本添加颜色。

        .AddItem "Blue"

        .AddItem "Red"

        .ListIndex = 0

    End With

End Sub

Private Sub Form_Resize()

    '配置 ComboBox 控件。

    With Combo1

        .Width = Toolbar1.Buttons("combo1").Width

        .Top = Toolbar1.Buttons("combo1").Top

        .Left = Toolbar1.Buttons("combo1").Left

    End With

End Sub

Private Sub toolbar1_ButtonClick(ByVal Button As Button)

    '用 Key 属性和 SelectCase 语句来指定一个动作。

    Select Case Button.Key

    Case Is = "open"           '打开文件。

        MsgBox "Add code to open file here!"

    Case Is = "save"              '保存文件。

        MsgBox "Add code to save file here!"

    End Select

End Sub

Private Sub Combo1_Click()

    '用 ComboBox 改变窗体的背景。

    Select Case Combo1.ListIndex

    Case 0

        Form1.BackColor = vbBlack

    Case 1

        Form1.BackColor = vbBlue

    Case 2

        Form1.BackColor = vbRed

    End Select

End Sub


Button 对象

一个 Button 对象代表单个按钮，它属于 Toolbar 控件的 Buttons 集合。

说明

对每个 Button 对象都可添加来自于某个 ImageList 控件的文本或位图图象，或者，二者皆可添加进来，并设置属性来更改其状态和样式。

在设计时可在Toolbar 控件的属性页内，用“按钮”选项卡上的“插入”和“删除”按钮插入 Button 对象，并从 Buttons 集合中删除 Button 对象。在运行时也可用 Buttons 集合的 Add 方法添加 Button 对象。

在设计时和运行时都可设置 Caption、Image、Value、MixedState 和 ToolTipText 属性来改变每个 Button 对象的外观。

无论何时单击 Toolbar 控件上的按钮，都会用选定的 Button 对象调用 ButtonClick 事件，这个 Button 对象是作为参数传过来的。单击按钮时，为了使某些动作出现，可在 Select Case 语句中使用 Index 或 Key 属性，如下列代码所示：

Select Case Button.Key

    Case Is = "open" '打开文件。

    '此处添加代码以打开文件

    Case Is = "save" '保存文件。

    '此处添加代码以保存文件

    Case Else

    '如果按下的是任何其它按钮

End Select


Buttons 集合

Buttons 集合是 Toolbar 控件的 Button 对象的一个集合。

语法

toolbar.Buttons(index)

toolbar.Buttons.Item(index)

Buttons 集合的语法包含下面部分：

部分	描述
toolbar	对象表达式，其值是 Toolbar 控件。
index	整数或字符串，它唯一标识集合中的对象。整数是 Index 的属性值；字符串是 Key 的属性值。
说明

Buttons 集合是一个基于 1 的集合，这意味着该集合的 Index 属性是从数字 1 开始的（而在基于 0 的集合中则从 0 开始）。

集合的每一项都可以通过其索引或唯一关键字来访问。例如，为引用集合中第三个 Button 对象可用以下语法：

Dim btnX As Button

'通过索引数字引用。

Set btnX = Toolbar1.Buttons(3)

'或通过唯一关键字引用。

Set btnX = Toolbar1.Buttons("third") '假设 Key 是“third”。

'或用 Item 方法。

Set btnX = Toolbar1.Buttons.Item(3)


Add 方法（Buttons 集合）

将 Button 对象添加到 Buttons 集合中，并返回对新创建对象的引用。

语法

object.Add(index, key, caption, style, image)

Add 方法的语法包含下面部分：

部分	描述
object	必需的。对象表达式，其值是 Buttons 集合。
index	可选的。整数，它指定要插入 Button 对象的位置。如果没有指定任何 index，则将 Button 对象添加到 Buttons 集合的末尾。
key	可选的。唯一标识 Button 对象的字符串。用这个值检索特定的 Button 对象。
caption	可选的。将出现在 Button 对象之下的字符串。
style	可选的。Button 对象的样式。在 Style 属性（Button 对象）中详细描述了可用的样式。
image	可选的。整数或唯一关键字，在某个相关联的 ImageList 控件内，它指定一个 ListImage 对象。
说明

在设计时可用 Toolbar 控件的属性页的“按钮”选项卡来添加 Button 对象。在运行时，可用 Add 方法来添加 Button 对象，如下列代码中所示：

Dim btnButton as Button

Set btnButton = Toolbar1.Buttons.Add(, "open", , tbrDefault, "open")

可通过 Toolbar 控件的 ImageList 属性使 ImageList 控件与 Toolbar 相关联。


AllowCustomize 属性

返回或设置一个值，该值决定最终用户是否可用“自定义工具栏”对话框自定义 Toolbar 控件。

语法

object.AllowCustomize [= boolean]

AllowCustomize 属性的语法包含下面部分：

部分	描述
object	对象表达式，其值是 Toolbar 控件。
boolean	常数或值，它决定用户是否可自定义 Toolbar 控件，在“设置值”中有详细描述。
设置值

boolean 的设置值是：

设置值	描述
True	允许最终用户通过双击 Toolbar 控件来调用“自定义工具栏”对话框。
False	不允许用“自定义工具栏”对话框自定义 Toolbar 控件。
说明

如果将 AllowCustomize 属性设置为 True，则在运行时双击 Toolbar 控件就可调用“自定义工具栏”对话框。

也可用 Customize 方法调用“自定义工具栏”。


ButtonClick 事件

当用户单击 Toolbar 控件内的 Button 对象时发生。

语法

Private Sub object_ButtonClick(ByVal button As Button)

ButtonClick 事件的语法包含下面部分：

部分	描述
object	对象表达式，其值是 Toolbar 控件。
Button	对被单击的 Button 对象的引用。
说明

单个 Button 对象会对 ButtonClick 事件作出反应，为了对这种反应编程，可用 button 参数值。例如，下列代码用 Button 对象的 Key 属性来确定合适的动作。

Private Sub Toolbar1_ButtonClick(ByVal Button As Button)

Select Case Button.Key

Case "Open"

CommonDialog1.ShowOpen

Case "Save"

CommonDialog1.ShowSave

End Select

End Sub

注意   因为用户可用“自定义工具栏”对话框重新安排 Button 对象，所以，Index 属性值可能并不总指示按钮的位置。因此，更可取的方法是用 Key 属性值检索 Button 对象。


ButtonHeight、ButtonWidth 属性

返回或设置 Toolbar 控件按钮的高度和宽度。

语法

object.ButtonHeight [= number]

object.ButtonWidth [= number]

ButtonHeight，ButtonWidth 属性的语法包含下面部分：

部分	描述
object	对象表达式，其值是 Toolbar 控件。
number	数值表达式，在具有按钮、复选或 ButtonGroup 样式的控件上，它指定所有按钮的大小。
说明

ButtonHeight 和 ButtonWidth 使用 Toolbar 控件容器的标度单位。标度单位由容器的 ScaleMode 属性决定。

按照缺省规定，自动更新 ButtonWidth 和 ButtonHeight 属性，从而在 Button 对象的 Caption 属性中容纳字符串或者 Image 属性中的图象。


Buttons 属性

返回对 Toolbar 控件的 Button 对象集合的引用。

语法

object.Buttons

object 所在处是一个对象表达式，其值是 Toolbar 控件。

说明

可用标准集合方法（例如 Add 和 Remove 方法）操作 Button 对象。集合的每个元素都可通过其索引，即 Index 属性值来访问，也可通过唯一关键字，即 Key 属性值来访问。


Customize 方法

调用“自定义工具栏”对话框，该对话框允许最终用户在 Toolbar 控件上重新安排或隐藏 Button 对象。

语法

object.Customize

object 所在处是一个对象表达式，其值是 Toolbar 控件。

说明

Toolbar 控件包含内置对话框，允许用户隐藏、显示或重新安排工具栏上的按钮。双击工具栏后就会调用 Customize 方法，而该方法将调用对话框。

当希望限制工具栏的变化时要用 Customize 方法。例如，下列代码仅在用户给出密码字时才允许自定义工具栏：

Private Sub Command1_Click()

If InputBox("Password:") = "Chorus&Line9" Then

Toolbar1.Customize	'调用 Customize 方法。

End If

End Sub

为了保存 Toolbar 控件的状态，用 SaveToolbar 方法将其写到 Windows 注册表中。可用 RestoreToolbar 方法读出先前保存在注册表中的信息，从而将 Toolbar 控件恢复到先前状态。


Description 属性（Button 对象）

返回或设置描述 Button 对象的文本，该文本是在“自定义工具栏”对话框中显示的。

语法

object.Description [= string]

Description 属性的语法包含下面部分：

部分	描述
object	对象表达式，其值是 Button 对象。
String	字符串，当选定按钮时，在“自定义工具栏”对话框中显示这个字符串。
说明

在运行时，用户可通过双击 Toolbar 控件或在编程时用 Customize 方法来调用“自定义工具栏”对话框。在任何一种情况下，当用户在对话框中选定按钮时，对按钮的描述也就显示在对话框的左下角了。描述的文本是用 Description 属性设置的。

如下所示，可在添加 Button 对象时设置 Description 文本：

Dim btnX As Button

'用 Key "save" 添加一个按钮。

Set btnX = Toolbar1.Buttons.Add(,"save")

btnX.Description = "Save a file."


MixedState 属性

返回或设置一个值，该值决定 Toolbar 控件中的 Button 对象是否以不确定状态出现。

语法

object.MixedState [= boolean]

MixedState 属性的语法包含下面部分：

部分	描述
object	对象表达式，其值是 Button 对象。
Boolean	布尔表达式，它决定 Button 是否显示不确定状态，在“设置值”中有详细描述。
设置值

boolean 的设置值是：

设置值	描述
True	Button 对象处在不确定状态，而且变得暗淡。
False	Button 对象未处在不确定状态，而且看上去是正常的。
说明

当一个选择有多个属性时，一般要用到 MixedState 属性。例如，如果选择既包含普通（正常）字符又包含粗体字符的文本，要用到 MixedState 属性。于是，可更改 Button 对象所显示的图象以指示其状态，其状态不同于 Value 属性所返回的已检查的值和未经检查的值。


RestoreToolbar 方法

将 Toolbar 控件创建的工具栏恢复到自定义后的最初状态。

语法

object.RestoreToolbar(key As String, subkey As String, value As String)

RestoreToolbar 方法的语法包含下面部分：

部分	描述
object	必需的。对象表达式，其值是 Toolbar 控件。
key	必需的。字符串表达式，它指定 Windows 注册表中的关键字，而注册表是用这种方法检索 Toolbar 信息的地方。
subkey	必需的。字符串表达式，它在注册表中指定 key 参数下的一个子键。
value	必需的。字符串表达式，它标识 subkey 之下的值，而 subkey 是注册表中保存 Toolbar 信息的地方。
说明

警告   当使用 RestoreToolbar 方法时，任何不包含 ImageList ListImage 对象的工具栏按钮都会消失。用户可再次使用自定义工具栏对话框上的复位按钮使它们可见。可用方法编程调用该对话框。

为在运行时自定义 Toolbar 控件，应在代码中使用 Customize 方法，而如果 AllowCustomize 属性是 True 的话，则用户可通过双击控件来自定义。

可用 SaveToolbar 方法将工具栏的状态保存在注册表中。通过读取注册表，RestoreToolbar 方法可恢复工具栏的状态。

下列代码为当前用户恢复 Toolbar 控件的设置值，不过要假设先前已经用 SaveToolbar 方法将它们保存起来了。

Toolbar1.RestoreToolbar "AppName", "User1", "Toolbar1"


SaveToolbar 方法

在运行时，把用 Toolbar 控件创建的工具栏的状态保存在注册表中。

语法

object.SaveToolbar(key As String, subkey As String, value As String)

SaveToolbar 方法的语法包含下面部分：

部分	描述
object	必需的。对象表达式，其值是 Toolbar 控件。
key	必需的。字符串表达式，它指定注册表中的关键字，而注册表是保存 Toolbar 信息的地方。
subkey	必需的。字符串表达式，它在注册表中指定 key 参数下的位置。
value	必需的。保存在 subkey 中的 Toolbar 信息。
说明

为了在运行时自定义 Toolbar 控件，应在代码中使用 Customize 方法，而如果 AllowCustomize 属性是 True 的话，则用户可通过双击控件来自定义。

如果注册表中不存在已指定的 key，subkey 或 value，则应创建它。

为保存多个版本的工具栏，应更改 subkey 或 value 参数。这会使工具栏写到注册表的不同部分。在已自定义了工具栏之后，下列代码保存工具栏的两个不同状态。

'为 User1 保存设置值

Toolbar1.SaveToolbar "AppName", "User1", "Toolbar1"

'为 User2 保存设置值

Toolbar1.SaveToolbar "AppName", "User2", "Toolbar1"

因为在自定义工具栏之后才发生 Toolbar 控件的 Change 事件，所以在大多数情况下，可将上述代码放置在工具栏的 Change 事件中。


Style 属性（Button 对象）

返回或设置常数或值，它决定 Toolbar 控件中的 Button 对象的外观和状态。

语法

object.Style [=value]

Style 属性的语法包含下面部分：

部分	描述
object	对象表达式，其值是 Button 对象。
Value	常数或整数，它决定 Button 对象的外观和状态，在“设置值”中有详细描述。
设置值

value 的设置值为：

常数	值	描述
tbrDefault	0	（缺省的）按钮。按钮是一个规则的下压按钮。
tbrCheck	1	复选。按钮是一个复选按钮，它可以被选定或者不被选定。
tbrButtonGroup	2	按钮组。直到组内的另一个按钮被按下之前，按钮都保持按下的状态。在任何时刻都只能按下组内一个按钮。
tbrSeparator	3	分隔符。按钮的功能是作为有 8 个像素的固定宽度的分隔符。
tbrPlaceholder	4	占位符。按钮在外观和功能上象分隔符，但具有可设置的宽度。
说明

必须将具有 Button Group 样式的按钮分组。为区别一个组，将所有具有相同样式 (Button Group) 的 Button 对象放置在两个有分隔符样式的 Button 对象之间。

也可赋予 Button 对象以占位符样式，然后将一个控件放置到工具栏上，由此就把另一个控件放置在工具栏上。例如，为了在设计时将下拉组合框放在工具栏上，可添加一个具有占位符样式的 Button 对象，并把它调整到 ComboBox 控件的大小。然后将 ComboBox 放置在占位符处。

当 Button 对象被赋予占位符样式时，可设置 Width 属性值来容纳放置在 Button 上的另一控件。如果 Button 对象具有按钮、复选框或者按钮组样式，则可由 ButtonHeight 和 ButtonWidth 属性决定其高度和宽度。

如果将一个控件放置在具有占位符样式的按钮上并重新调整窗体大小，则必须用代码来对齐该控件并调整其大小，如下所示：

Private Sub Form_Resize()

'通过将 ComboBox 的 Top、Left 和 Width 属性

'设置为一个 Button 对象的 Top、Left 和 Width

'属性来追踪它

With Toolbar1.Buttons("Combo1")

Combo1.Move .Left,.Top,.Width

End With

End Sub


Wrappable 属性

返回或设置一个值，该值决定了当重新设置窗口的大小时，Toolbar 控件按钮是否自动换行。

语法

object.Wrappable [= boolean]

Wrappable 属性的语法包含下面部分：

部分	描述
object	对象表达式，其值是 Toolbar 控件。
boolean	布尔表达式，它决定 Toolbar 控件上的 Button 对象是否自动换行，在“设置值”中有详细描述。
设置值

boolean 的设置值是：

设置值	描述
True	如果重新调整窗体大小，则 Toolbar 控件上的按钮自动换行。
False	如果重新调整窗体大小，则 Toolbar 控件上的按钮不会自动换行。


Toolbar 控件常数

样式常数

常数	值	描述
tbrDefault	0	按钮是规则的下压按钮。
tbrCheck	1	按钮是复选按钮。
tbrButtonGroup	2	直到同组中另一个按钮被按下之前，按钮都保持被按下的状态。在任何时刻，该组中都只有一个按钮被按下。
tbrSeparator	3	按钮的功能就象一个有固定的 8 个像素宽度的分隔符。
tbrPlaceholder	4	按钮在外观和功能上就象分隔符，但具有可设置的宽度。
常数值

常数	值	描述
tbrUnpressed	0	按钮当前没有被按下或者被复选。
tbrPressed	1	按钮当前被按下或者被复选。


Controls 属性（Toolbar 控件）

返回对包含在某个对象上的控件集合的引用。

语法

object.Controls(index)

object.Controls.Item(index)

Controls 属性的语法包含下面部分：

部分	描述
object	对象表达式，其值是 “应用于”列表中的一个对象。
Index	标识控件集合的一个成员的值。
说明

Controls 属性类似于 Form 对象上的 Controls 集合，而且应以类似的方式访问这个属性。例如，可用下列代码获得 Toolbar 控件上的第二个控件的 Top 属性：

MsgBox Toolbar1.Controls(2).Top

用 Controls 属性，可在 Tab 对象或 Toolbar 控件上遍历所有控件并更改每个控件的属性，如下面代码所示：

For Each ContainedControl in Toolbar1.Controls

ContainedControl.Width = Toolbar1.Width / Toolbar1.Buttons.Count

Next

注意   Controls 集合引用包含在 Toolbar 控件中的控件，比如 ComboBox 控件，但不是 Button 对象，因为这些对象是该控件本身的一部分。


HelpContextID 属性（Toolbar 控件）

返回或设置对象的相关联的上下文号。用来对应用程序提供上下文相关的帮助。

注意    Toolbar 控件的 HelpContextID 属性使从自定义工具栏对话框链接到帮助，而不是从控件本身链接到帮助。这种行为不同于其它包含 HelpContextID 属性的 Visual Basic 控件。

Syntax

object.HelpContextID [= number]

The HelpContextID 属性的语法具有以下几部分：

部分	描述
object	对象表达式 ，其值为“应用于”列表中的对象。如果省略 object，则与活动窗体模块 相关联的窗体被取作 object。
number	数值表达式，指定与 object 相关联的帮助标题的上下文号。
设置值

 number的设置值为：

Setting	描述
0	（缺省）未指定上下文号。
> 0	指定有效的上下文号的整数。
说明

为了得到有关应用程序中的对象的上下文相关帮助，在编译帮助文件时，必须将相同的上下文号指定给 object 和关联的帮助主题。

如果已对应用程序创建 Microsoft Windows 操作环境帮助文件并设置了应用程序的 HelpFile 属性，则当用户按下 F1 键时， Visual Basic 会自动调用帮助并搜索当前上下文号识别的主题。

对具有焦点的对象，当前上下文号是 HelpContextID 的值 。如果将 HelpContextID 设置成 0，则 Visual Basic 查看对象的容器的 HelpContextID，然后查看该对象的容器等等。如果为能找到非零的当前上下文号，则忽略 F1 键。

对 Menu 控件, HelpContextID 在运行时通常为读/写的。但对于由 Visual Basic 向外接程序显露和提供的菜单项目，比如对外接程序管理器，HelpContextID 是只读的。

注意   建立帮助文件要求 Microsoft Windows 帮助编译器，它随 Visual Basic 专业版提供。


HelpFile 属性（Toolbar 控件）

指定路径和 Microsoft Windows 帮助文件的文件名，应用程序使用它显示帮助或联机文档。

注意   工具栏控件的 HelpFile 属性能够从自定义工具栏对话框而不是从控件本身链接到帮助。该性能不同于 Visual Basic 的其它包含 HelpFile 属性的控件的性能。

Syntax

object.HelpFile[ = filename]

The HelpFile 属性的语法具有以下几部分：

部分	描述
object	对象表达式，其值为“应用于”列表中的对象。
filename	字符串表达式，对应用程序指定 Windows 帮助文件的路径和文件名。
说明

如果已对应用程序创建了 Windows 帮助文件并设置了应用程序的 HelpFile 属性，则当用户按下 F1 键时， Visual Basic 自动调用帮助。如果在 HelpContextID 属性中对活动控件或活动窗体有一个上下文号，则帮助将显示与当前帮助上下文相应的主题，否则，它将显示主要内容屏幕。。

当用户要求从 ActiveX 部件的对象浏览器获得帮助时，也可用 HelpFile 属性来决定要显示哪个帮助文件。

注意   建立帮助文件将要求 Microsoft Windows 帮助编译器，它可与 Visual Basic 专业版同用。


TreeView 控件

TreeView 控件显示 Node 对象的分层列表，每个 Node 对象均由一个标签和一个可选的位图组成。TreeView 一般用于显示文档标题、索引入口、磁盘上的文件和目录、或能被有效地分层显示的其它种类信息。

语法

Treeview

说明

创建了 TreeView 控件之后，可以通过设置属性与调用方法对各 Node 对象进行操作，这些操作包括添加、删除、对齐和其它操作。可以编程展开与折回 Node 对象来显示或隐藏所有子节点。Collapse、Expand 和 NodeClick 三个事件也提供编程功能。

Node 对象使用 Root、Parent、Child、FirstSibling、Next、Previous 和 LastSibling 属性。在代码中可通过检索对 Node 对象的引用，从而在树上定位。也可以使用键盘定位。UP ARROW 键和 DOWN ARROW 键向下循环穿过所有展开的 Node 对象。从左到右、从上到下地选择 Node 对象。若在树的底部，选择便跳回树的顶部，必要时滚动窗口。RIGHT ARROW 键和 LEFT ARROW 键也穿过所有展开的 Node 对象，但是如果选择了未展开的 Node之后再按 RIGHT ARROW 键，该 Node 便展开；第二次按该键，选择将移向下一个 Node。相反，若扩展的 Node 有焦点，这时再按 LEFT ARROW 键，该 Node 便折回。如果按下 ANSI 字符集 中的键，焦点将跳转至以那个字母开头的最近的 Node。后续的按该键的动作将使选择向下循环，穿过以那个字母开头的所有展开节点。

控件的外观有八种可用的替换样式，它们是文本、位图、直线和 +/- 号的组合，Node 对象可以任一种组合出现。

TreeView 控件使用由 ImageList 属性指定的 ImageList 控件，来存储显示于 Node 对象的位图和图标。任何时刻，TreeView 控件只能使用一个 ImageList。这意味着，当 TreeView 控件的 Style 属性被设置成显示图象的样式时，TreeView 控件中每一项的旁边都有一个同样大小的图象。

发行注意   TreeView 控件是 COMCTL32.OCX 文件中的一组 ActiveX 控件的一部分。为了在应用程序中使用 TreeView 控件，必须将 COMCTL32.OCX 文件添加到工程中。在发行应用程序时，要在用户的 Microsoft Windows System 或 System32 目录中安装 COMCTL32.OCX 文件。


TreeView 控件常数

TreeLine 常数

常数	值	描述
tvwTreeLines	0	显示树线。
tvwRootLines	1	根线与树线一起显示。
TreeRelationship 常数

常数	值	描述
tvwFirst	0	第一个相邻节点。
tvwLast	1	最后的相邻节点。
tvwNext	2	下一个相邻节点。
tvwPrevious	3	前一个相邻节点。
tvwChild	4	子节点。
TreeStyle 常数

常数	值	描述
tvwTextOnly	0	仅是文本。
tvwPictureText	1	图片和文本。
tvwPlusMinusText	2	+/- 号和文本。
tvwPlusPictureText	3	+/- 号、图片和文本。
tvwTreelinesText	4	树线和文本。
tvwTreelinesPictureText	5	树线、图片和文本。
tvwTreelinesPlusMinusText	6	树线、+/- 号和文本。
tvwTreelinesPlusMinusPictureText	7	树线、+/- 号、图片和文本。
LabelEdit 常数

常数	值	描述
tvwAutomatic	0	标签编辑是自动的。
tvwManual	1	必须调用标签编辑。


Node 对象和 Nodes 集合

•	Node 对象是 TreeView 控件中的一项，它包含图象和文本。

•	Nodes 集合包含一个或多个 Node 对象。

语法

treeview.Nodes

treeview.Nodes.Item(index)

以上语法行，按照标准集合语法分别引用集合与集合中的单独元素。

Node 对象和 Nodes 集合的语法包含下面部分：

部分	描述
treeview	对象表达式 ，其值是 TreeView 控件。
index	整数或字符串，它唯一地标识 Nodes 集合的一个成员。整数是 Index 属性的值，字符串是 Key 属性的值。
说明

节点可包含文本和图片。然而，要使用图片，必须用 ImageList 属性关联一个 ImageList 控件。

图片可以根据节点的状态而改变；例如，如果将 SelectedImage 属性设置为来自关联的 ImageList 的图象，则被选中的节点可拥有与未选中的节点不同的图片。


Add 方法（Nodes 集合）

在 Treeview 控件的 Nodes 集合中添加一个 Node 对象。

语法

object.Add(relative, relationship, key, text, image, selectedimage)

Add 方法的语法包含下面部分：

部分	描述
object	必需的。对象表达式，其值是“应用于”列表中的一个对象
relative	可选的。已存在的 Node 对象的索引号或键值。新节点与已存在的节点间的关系，可在下一个参数 relationship 中找到。
relationship	可选的。指定的 Node 对象的相对位置，如设置值中所述。
key	可选的。唯一的字符串，可用于用 Item 方法检索 Node。
text	必需的。在 Node 中出现的字符串。
image	可选的。在关联的 ImageList 控件中的图象的索引。
selectedimage	可选的。在关联的 ImageList 控件中的图象的索引，在 Node 被选中时显示。
设置值

relationship 的设置值是：

常数	值	描述
tvwFirst	0	首的节点。该 Node 和在 relative 中被命名的节点位于同一层，并 位于所有同层节点之前。
tvwLast	1	最后的节点。该 Node 和在 relative 中被命名的节点位于同一层，并 位于所有同层节点之后。任何连续地添加的节点可能位于最后添加的节点之后
tvwNext	2	（缺省）下一个节点。该 Node 位于在 relative 中被命名的节点之后。
tvwPrevious	3	前一个节点。该 Node 位于在 relative 中被命名的节点之前。
tvwChild	4	（缺省）子节点。该 Node 成为在 relative 中被命名的 节点的子节点。
注意   如果在 relative 中没有被命名的 Node 对象，则新节点被放在节点顶层的最后位置。

说明

Nodes 集合是一个基于 1 的集合。

在添加 Node 对象时，它被指派一个索引号，该索引号被存储在 Node 对象的 Index 属性中。这个最新成员的 Index 属性值就是 Node 集合的 Count 属性的值。

因为 Add 方法返回对新建立的 Node 对象的引用，所以使用这个引用来设置新 Node 的属性十分方便。以下例子添加几个具有相同属性的 Node 对象：

Dim nodX As Node	'声明对象变量。

Dim I as Integer	'声明计数器变量。

For I = 1 to 4

Set nodX = TreeView1.Nodes.Add(,,,"Node " & Cstr(i))

'使用引用来设置其它属性，如 Enabled。

nodX.Enabled = True

'把图象属性设置为在关联的 ImageList 中的图象 3。

nodX.ExpandedImage = 3

Next I


Add 方法示例（Nodes 集合）

以下例子给 TreeView 控件添加两个 Node 对象。为试用此例，在窗体上安放一个 TreeView 控件，并在窗体的声明部分中粘贴下面的代码。运行此例，且单击 Node 对象以展开它。

Private Sub Form_Load()

'设置 Treeview 控件属性。

TreeView1.LineStyle = tvwRootLines  ' Linestyle 1

'添加 Node 对象。

Dim nodX As Node    '声明 Node 变量。

'带有文本 'Root' 的第一个节点。

Set nodX = TreeView1.Nodes.Add(, , "r", "Root")

'下一个节点是节点 1 ("Root") 的子节点。

Set nodX = TreeView1.Nodes.Add("r", tvwChild, "child1", "Child")

End Sub


Child 属性（TreeView 控件）

返回对 TreeView 控件中的 Node 对象的第一个子节点的引用。

语法

object.Child

object 所在处代表一个对象表达式，其值是“应用于”列表中的一个对象。

说明

Child、FirstSibling、LastSibling、Previous、Parent、Next 和 Root 属性全都返回对另一个 Node 对象的引用。所以，可同时引用并执行对 Node 的操作，如下所示：

With TreeView1.Nodes(TreeView1.SelectedItem.Index).Child

.Text = "New text"

.Key = "New key"

.SelectedImage = 3

End With

也可以将对象变量设置为引用的 Node，如下所示：

Dim NodChild As Node

'得到对被选中的节点的子节点的引用。

Set NodChild = TreeView1.Nodes(TreeView1.SelectedItem.Index).Child

'使用这个引用执行对子节点的操作。

With nodChild

.Text = "New text"	'改变文本。

.Key = "New key"	'改变键。

.SelectedImage = 3	'改变 SelectedImage。

End With


Child 属性示例

这个例子创建几个 Node 对象。在单击 Node 对象时，代码首先使用 Children 属性确定 Node 是否有子节点。如果有，窗体的标题就显示 Child 节点的文本。

Option Explicit

Private Sub Form_Load()

'这一代码创建一棵带有三个 Node 对象的树。

TreeView1.Style = tvwTreelinesPlusMinusText ' Style 6.

TreeView1.LineStyle = tvwRootLines  'Linestyle 1.

'添加几个Node对象。

Dim nodX As Node    '创建变量。

Set nodX = TreeView1.Nodes.Add(, , "r", "Root")

Set nodX = TreeView1.Nodes.Add("r", tvwChild, "c1", "Child 1")

nodX.EnsureVisible '显示全部节点。

Set nodX = TreeView1.Nodes.Add("c1", tvwChild, "c2", "Child 2")

Set nodX = TreeView1.Nodes.Add("c1", tvwChild, "c3", "Child 3")

nodX.EnsureVisible '显示全部节点。

End Sub

Private Sub TreeView1_NodeClick(ByVal Node As Node)

'如果该节点确有子节点，则显示

'该子节点的文本。

If Node.Children Then

Caption = Node.Child.Text

End If

End Sub


Children 属性

这个属性返回包含在 Node 对象中的各子 Node 对象的个数。

语法

object.Children

object 所在处代表一个对象表达式，其值是“应用于”列表中的一个对象。

说明

在执行一个影响子节点的操作之前，可用 Children 属性检查 Node 对象是否有子节点。例如，以下代码在检索第一个 Node 的 Text 属性之前，使用 Child 属性检查子节点的存在。

Private Sub TreeView1_NodeClick(ByVal Node As Node)

If Node.Children > 0 Then

MsgBox Node.Child.Text

End If

End Sub


Children 属性示例

这个例子在 TreeView 控件中放置几个 Node 对象。这组代码检查 Node 是否有子节点。如果有，则显示子节点的文本。为试用此例，在窗体上安放一个 TreeView 控件，并在窗体的声明部分中粘贴下面的代码。运行此例，单击 Node 对象以选择它，然后单击该窗体来察看 Node 对象的子节点的文本。

Option Explicit

Private Sub Form_Click()

Dim strC As String

Dim N As Integer

If TreeView1.SelectedItem.Children > 0 Then '有子节点。

'获取第一个子节点的文本，并将 N 设置为它的索引值。

strC = TreeView1.SelectedItem.Child.Text & vbLF

N = TreeView1.SelectedItem.Child.Index

'若 N 不是子节点的最后相邻节点的索引，

'则获取下一个相邻节点的文本。

While N <> TreeView1.SelectedItem.Child.LastSibling.Index

strC = strC & TreeView1.Nodes(N).Next.Text & vbLF

'重置 N 为下一个相邻节点的索引。

N = TreeView1.Nodes(N).Next.Index

Wend

'显示结果。

MsgBox "Children of " & TreeView1.SelectedItem.Text & _

" are: " & vbLF & strC

Else '没有子节点。

MsgBox TreeView1.SelectedItem.Text & " has no children"

End If

End Sub

Private Sub Form_Load()

TreeView1.BorderStyle = 1  '确保边界是可视的。

Dim nodX As Node

Set nodX = TreeView1.Nodes.Add(,,"d","Dates")

Set nodX = TreeView1.Nodes.Add("d",tvwChild,"d89","1989")

Set nodX = TreeView1.Nodes.Add("d",tvwChild,"d90","1990")

'创建 1989 节点的子节点。

Set nodX = TreeView1.Nodes.Add("d89",tvwChild, ,"John")

Set nodX = TreeView1.Nodes.Add("d89",tvwChild, ,"Brent")

Set nodX = TreeView1.Nodes.Add("d89",tvwChild, ,"Eric")

Set nodX = TreeView1.Nodes.Add("d89",tvwChild, ,"Ian")

nodX.EnsureVisible '显示所有节点。

'创建 1990 节点的子节点。

Set nodX = TreeView1.Nodes.Add("d90",tvwChild, ,"Randy")

Set nodX = TreeView1.Nodes.Add("d90",tvwChild, ,"Ron")

nodX.EnsureVisible '显示所有节点。

End Sub


Collapse 事件（TreeView 控件）

在 TreeView 控件中的任何 Node 对象被折回时，这个事件便发生。

语法

Private Sub object_Collapse(ByVal node As Node)

Collapse 事件的语法包含下面部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的对象。
node	对被单击的 Node 对象的引用
说明

Collapse 事件发生在标准的 Click 事件之前。

折回一个 Node 有三种方法：其一，设置 Node 对象的 Expanded 属性为 False；其二，双击 Node 对象；其三，在 TreeView 控件的 Style 属性被设置为包括 +/- 号图象的样式的情况下，单击 +/- 号图象。所有这些方法都产生 Collapse 事件。

这个事件传送对折回的 Node 对象的引用。该引用可使一个操作有效，如以下例子所示：

Private Sub TreeView1_Collapse(ByVal Node As Node)

If Node.Index = 1 Then

Node.Expanded = True	' Expand the node again.

End If

End Sub


Collapse 事件（TreeView 控件）示例

这个例子在 TreeView 控件中添加一个有若干子节点的 Node 对象。在折回 Node 时，这组代码检测该 Node 有多少子节点。如果它多于一个子节点，该 Node 就被再展开。为试用此例，在窗体上安放一个 TreeView 控件，并在窗体的声明部分中粘贴这组代码。运行此例，并双击 Node 对象使其折叠，发生这个事件。

Private Sub Form_Load()

TreeView1.Style = tvwTreelinesPlusMinusText '样式6。

Dim nodX As Node

Set nodX = TreeView1.Nodes.Add(,,"DV","Da Vinci")

Set nodX = TreeView1.Nodes.Add("DV",tvwChild,"T","Titian")

Set nodX = TreeView1.Nodes.Add("T",tvwChild,"R","Rembrandt")

Set nodX = TreeView1.Nodes.Add("R",tvwChild,,"Goya")

Set nodX = TreeView1.Nodes.Add("R",tvwChild,,"David")

nodX.EnsureVisible	'显示全部节点。

End Sub

Private Sub TreeView1_Collapse(ByVal Node As Node)

'如果 Node 有多于一个的子节点，

'保持该节点展开。

Select Case Node.Children

Case Is > 1

Node.Expanded = True

End Select

End Sub


AfterLabelEdit 事件（ListView 和 TreeView 控件）

在编辑当前被选中的 Node 或 ListItem 对象的标签之后该事件发生。

语法

Private Sub object_AfterLabelEdit(cancel As Integer, newstring As String)

AfterLabelEdit 事件的语法包含下面部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的一个对象
cancel	整数，它确定标签编辑操作是否被取消。任何非零整数取消该操作。也可以接受布尔值。
newstring	用户输入的字符串或 Null，该值为 Null 时表示用户取消了该操作。
说明

只有在 LabelEdit 属性被设置为 0（自动地）、或 StartLabelEdit 方法被调用时，AfterLabelEdit 与 BeforeLabelEdit 事件才发生。

在完成编辑操作之后发生 AfterLabelEdit 事件。用户单击另一个 Node 或 ListItem、或者按 ENTER 键的时刻，便是编辑操作完成的时刻。

要取消标签的编辑操作，可以设置 cancel 为任何非零数或 True。如果标签的编辑操作被取消，则先前存在的标签被恢复。

可用 newstring 参数在取消操作之前进行条件测试。例如在下面的代码中，如果 newstring 是一个数则取消操作。

Private Sub TreeView1_AfterLabelEdit(Cancel As Integer, NewString As String)

If IsNumeric(NewString) Then

MsgBox "No numbers allowed"

Cancel = True

End If

End Sub


AfterLabelEdit 事件（ListView 和 TreeView 控件）示例

这个例子在 TreeView 控件中添加三个 Node 对象。当试图编辑一个 Node 对象的标签时，先检查该对象的索引。如果它是 1，操作即被取消。为试用此例，在窗体上安放一个 TreeView 控件，并在窗体的声明部分中粘贴下面的代码。运行此例，在顶层 Node 对象的标签上单击两次以编辑它，键入适当文本，再按 ENTER 键。

Private Sub Form_Load()

TreeView1.Style = tvwTreelinesText '行和文本。

Dim nodX As Node

Set nodX = TreeView1.Nodes.Add(,,,"Parent")

Set nodX = TreeView1.Nodes.Add(1,tvwChild,,"Child1")

Set nodX = TreeView1.Nodes.Add(1,tvwChild,,"Child2")

nodX.EnsureVisible	'确保所有节点是可见的。

End Sub

Private Sub TreeView1_AfterLabelEdit _

(Cancel As Integer, NewString As String)

'如果当前节点的索引是 1，编辑被取消。

If TreeView1.SelectedItem.Index = 1 Then

Cancel = True

MsgBox "Can't replace " & TreeView1.SelectedItem.Text & _

" with " & NewString

End If

End Sub

这个例子在 ListView 控件中添加三个 ListItem 对象。当试图编辑一个 ListItem 对象的标签时，先检查该对象的索引。如果它是 1，操作即被取消。为试用此例，在窗体上安放一个 ListView 控件，并在窗体的声明部分中粘贴下面的代码。运行此例，在任何 ListItem 对象的标签上单击两次以编辑它，键入适当文本，再按 ENTER 键。

Private Sub Form_Load()

Dim itmX As ListItem

Set itmX = ListView1.ListItems.Add(,,"Item1")

Set itmX = ListView1.ListItems.Add(,,"Item 2")

Set itmX = ListView1.ListItems.Add(,,"Item 3")

End Sub

Private Sub ListView1_AfterLabelEdit _

(Cancel As Integer, NewString As String)

'如果当前 ListItem 的索引是 1，则编辑被取消。

If ListView1.SelectedItem.Index = 1 Then

Cancel = True

MsgBox "Can't replace " & ListView1.SelectedItem.Text & _

" with " & NewString

End If

End Sub


BeforeLabelEdit 事件（ListView 和 TreeView 控件）

当试图编辑当前被选中的 ListItem 或 Node 对象的标签时，这个事件发生。

语法

Private Sub object_BeforeLabelEdit(cancel As Integer)

BeforeLabelEdit 事件的语法包含下面部分：

部分	描述
object	对象表达式，其值是 “应用于”列表中的一个对象。
cancel	整数，确定操作是否被取消。任何非零整数取消这次操作。缺省值是 0。
说明

只有在 LabelEdit 属性被设置为 0（自动地）、或 StartLabelEdit 方法被调用时，AfterLabelEdit 和 BeforeLabelEdit 事件才产生。

BeforeLabelEdit 事件发生在标准的 Click 事件之后。

要开始编辑一个标签，必须先单击要选择的对象，再次单击它便开始操作。在第二次单击之后 BeforeLabelEdit 事件便发生。

为了确定哪个对象的标签在编辑，使用 SelectedItem 属性。以下例子在允许编辑之前先检验选中的 Node 的索引。如果该索引是 1，则取消操作。

Private Sub TreeView1_BeforeLabelEdit(Cancel As Integer)

If TreeView1.SelectedItem.Index = 1 Then

Cancel = True	'取消操作。

End If

End Sub


BeforeLabelEdit 事件（ListView 和 TreeView 控件）示例

这个例子在 TreeView 控件中添加几个 Node 对象。如果试图编辑一个标签，则选择该 Node 对象的索引。如果索引是 1，编辑即被阻止。为试用此例，要在窗体上安放一个 TreeView 控件并在窗体的声明部分中粘贴这段代码。运行此例并编辑标签。

Private Sub Form_Load()

Dim nodX As Node

Set nodX = TreeView1.Nodes.Add(,,"P1","Parent 1")

Set nodX = TreeView1.Nodes.Add("P1",tvwChild,,"Child 1")

Set nodX = TreeView1.Nodes.Add("P1",tvwChild,,"Child 2")

nodX.EnsureVisible	'确保全部节点是可视的。

End Sub

Private Sub TreeView1_BeforeLabelEdit(Cancel As Integer)

'检验选中的节点的索引。如果是 1，

'则取消这次编辑操作。

If TreeView1.SelectedItem.Index = 1 Then

MsgBox "Can't edit " + TreeView1.SelectedItem.Text

Cancel = True

End If

End Sub

这个例子在 ListView 控件中添加几个 ListItem 对象。如果试图编辑标签，先检验该 ListItem 对象的索引。如果是 1，编辑被阻止。为试用此例，要在窗体上安放一个 ListView 控件，并在窗体的声明部分中粘贴这段代码。运行此例，并试着编辑标签。

Private Sub Form_Load()

Dim nodX As ListViewItem

Set nodX = ListView1.ListItems.Add(, , "Item 1")

Set nodX = ListView1.ListItems.Add(, , "Item 2")

Set nodX = ListView1.ListItems.Add(, , "Item 3")

End Sub

Private Sub ListView1_BeforeLabelEdit(Cancel As Integer)

'检测选中的项的索引。如果是 1，

'则取消编辑操作。

If ListView1.SelectedItem.Index = 1 Then

MsgBox "Can't edit " + ListView1.SelectedItem.Text

Cancel = True

End If

End Sub


CreateDragImage 方法

这个方法使用对象的关联图象的抖动的形式创建拖动图象。这种图象一般用于拖放操作。

语法

object.CreateDragImage

object 所在处代表一个对象表达式，其值是“应用于”列表中的一个对象。

说明

CreateDragImage 方法一般用于在拖放操作开始时给 DragIcon 属性赋值一个图象。


CreateDragImage 方法示例

这个例子为 TreeView 控件添加几个 Node 对象。在选中一个 Node 对象后，便可把它拖到任何其它 Node。为试用此例，要在窗体上安放 TreeView 和 ImageList 控件并在窗体的声明部分中粘贴下面的代码。运行此例，且在附近拖动各 Node 对象观察结果。

'声明全局变量。

Dim indrag As Boolean '指示拖放操作的标志。

Dim nodX As Object '被拖动的项。

Private Sub Form_Load()

'在 Imagelist 控件中加载一个位图。

Dim imgX As ListImage

Dim BitmapPath As String

BitmapPath = "icons\mail\mail01a.ico"

Set imgX = imagelist1.ListImages.Add(, , LoadPicture(BitmapPath))

'初始化 TreeView 控件并创建几个节点。

TreeView1.ImageList = imagelist1

Dim nodX As Node	'创建一棵树。

Set nodX = TreeView1.Nodes.Add(, , , "Parent1", 1)

Set nodX = TreeView1.Nodes.Add(, , , "Parent2", 1)

Set nodX = TreeView1.Nodes.Add(1, tvwChild, , "Child 1", 1)

Set nodX = TreeView1.Nodes.Add(1, tvwChild, , "Child 2", 1)

Set nodX = TreeView1.Nodes.Add(2, tvwChild, , "Child 3", 1)

Set nodX = TreeView1.Nodes.Add(2, tvwChild, , "Child 4", 1)

Set nodX = TreeView1.Nodes.Add(3, tvwChild, , "Child 5", 1)

nodX.EnsureVisible '展开树显示全部节点。

End Sub

Private Sub TreeView1_MouseDown_

(Button As Integer, Shift As Integer, x As Single, y As Single)

Set nodX = TreeView1.SelectedItem '设置要拖动的项。

End Sub

Private Sub TreeView1_MouseMove _

(Button As Integer, Shift As Integer, x As Single, y As Single)

If Button = vbLeftButton Then '指示拖动操作。

indrag = True '设置标志为 true。

'用 CreateDragImage 方法设置拖动图标。

TreeView1.DragIcon = TreeView1.SelectedItem.CreateDragImage

TreeView1.Drag vbBeginDrag '拖动操作。

End If

End Sub

Private Sub TreeView1_DragDrop_

(Source As Control, x As Single, y As Single)

If TreeView1.DropHighlight Is Nothing Then

Set TreeView1.DropHighlight = Nothing

indrag = False

Exit Sub

Else

If nodX = TreeView1.DropHighlight Then Exit Sub

Cls

Print nodX.Text & " dropped on " & TreeView1.DropHighlight.Text

Set TreeView1.DropHighlight = Nothing

indrag = False

End If

End Sub

Private Sub TreeView1_DragOver(Source As Control, x As Single, y As Single, State As Integer)

If indrag = True Then

'设置 DropHighlight 为鼠标的坐标。

Set TreeView1.DropHighlight = TreeView1.HitTest(x, y)

End If

End Sub


DropHighlight 属性（ListView 和 TreeView 控件）

这个属性返回或设置对 Node 或 ListItem 对象的引用，在光标移动到该对象上时，它就被突出显示为系统的突出颜色。

语法

object.DropHighlight [ =  value]

DropHighlight 属性的语法包含下面部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的一个对象。
value	Node 或 ListItem 对象
说明

DropHighlight 属性一般在拖放操作中与 HitTest 方法联用。在光标拖动到 ListItem 或 Node 对象上时，HitTest 方法返回对任何被拖到的对象的引用。接着，DropHighlight 属性被设置为点中的对象，同时返回对那个对象的引用。然后 DropHighlight 属性就用系统突出颜色突出点中的对象。以下代码将 DropHighlight 设置为用 HitTest 方法点中的对象。

Private Sub TreeView1_DragOver _

(Source As Control, X As Single, Y As Single, State As Integer)

Set TreeView1.DropHighlight = TreeView1.HitTest(X,Y)

End Sub

在后面的 DragDrop 事件中用 DropHighlight 属性返回对源控件最终落在其上的对象的引用，如以下代码所示：

Private Sub TreeView1_DragDrop _

(Source As Control, x As Single, y As Single)

'DropHighlight 返回对拖放操作发生在其上的对象的引用。

Me.Caption = TreeView1.DropHighlight.Text

'为了释放 DropHighlight 引用，将它设置为 Nothing。

Set TreeView1.DropHighlight = Nothing

End Sub

注意，在前面的例子中，在过程完成之后，DropHighlight 属性被设置为 Nothing。为了释放突出效果必须这样做。


DropHighlight 属性示例

这个例子为 TreeView 控件添加几个 Node 对象。在选择了一个 Node 对象之后，可以将它拖到任何其它 Node。为试用此例，要在窗体上安放 TreeView 和 ImageList 控件并在窗体的声明部分粘贴该代码。运行此例，并在附近拖动各 Node 对象，观察结果。

'声明全局变量。

Dim indrag As Boolean '指示拖放操作的标志。

Dim nodX As Object '在拖动的项。

Private Sub Form_Load()

'在 Imagelist 控件中加载位图。

Dim imgX As ListImage

Dim BitmapPath As String

BitmapPath = "icons\mail\mail01a.ico"

Set imgX = imagelist1.ListImages.Add(, , LoadPicture(BitmapPath))

'初始化 TreeView 控件并创建一些节点。

TreeView1.ImageList = imagelist1

Dim nodX As Node	' 创建树。

Set nodX = TreeView1.Nodes.Add(, , , "Parent1", 1)

Set nodX = TreeView1.Nodes.Add(, , , "Parent2", 1)

Set nodX = TreeView1.Nodes.Add(1, tvwChild, , "Child 1", 1)

Set nodX = TreeView1.Nodes.Add(1, tvwChild, , "Child 2", 1)

Set nodX = TreeView1.Nodes.Add(2, tvwChild, , "Child 3", 1)

Set nodX = TreeView1.Nodes.Add(2, tvwChild, , "Child 4", 1)

Set nodX = TreeView1.Nodes.Add(3, tvwChild, , "Child 5", 1)

nodX.EnsureVisible '展开树以显示全部节点。

End Sub

Private Sub TreeView1_MouseDown_

(Button As Integer, Shift As Integer, x As Single, y As Single)

Set nodX = TreeView1.SelectedItem '设置要被拖动的项。

End Sub

Private Sub TreeView1_MouseMove _

(Button As Integer, Shift As Integer, x As Single, y As Single)

If Button = vbLeftButton Then '指示一个拖动操作。

indrag = True '将标志设置为 true。

'用 CreateDragImage 方法设置拖动图标。

TreeView1.DragIcon = TreeView1.SelectedItem.CreateDragImage

TreeView1.Drag vbBeginDrag '拖动操作。

End If

End Sub

Private Sub TreeView1_DragDrop_

(Source As Control, x As Single, y As Single)

If TreeView1.DropHighlight Is Nothing Then

Set TreeView1.DropHighlight = Nothing

indrag = False

Exit Sub

Else

If nodX = TreeView1.DropHighlight Then Exit Sub

Cls

Print nodX.Text & " dropped on " & TreeView1.DropHighlight.Text

Set TreeView1.DropHighlight = Nothing

indrag = False

End If

End Sub

Private Sub TreeView1_DragOver(Source As Control, x As Single, y As Single, State As Integer)

If indrag = True Then

'设置 DropHighlight 为鼠标的坐标。

Set TreeView1.DropHighlight = TreeView1.HitTest(x, y)

End If

End Sub


EnsureVisible 方法

这个方法确保指定的 ListItem 或 Node 对象是可视的。如果需要，这个方法可展开 Node 对象并滚动 TreeView 控件。该方法仅可滚动 ListView 控件。

语法

object.EnsureVisible

object 所在处代表一个对象表达式，其值是“应用于”列表中的一个对象。

返回值

值	描述
True	如果 ListView 或 TreeView 控件必须滚动与/或扩展以显露该对象，该方法返回 True。
False	如果不需滚动与/或展开，该方法返回 False。
说明

一个特定的 Node 或 ListItem 对象可能深藏于 TreeView 或 ListView 控件中，当要使其为可视时，使用 EnsureVisible 方法。


EnsureVisible 方法示例

这个例子在 TreeView 控件中添加若干节点，并用 EnsureVisible 方法来滚动和展开树。为试用此例，在窗体上添加 TreeView 控件并在窗体的声明部分粘贴该代码。运行此例，单击该窗体来观察 TreeView 展开。

Private Sub Form_Load()

Dim nodX As Node

Dim i as Integer

TreeView1.BorderStyle = FixedSingle '显示边框。

Set nodX = TreeView1.Nodes.Add(,,,"Root")	'添加第一个节点。

For i = 1 to 15	'添加 15 个节点。

Set nodX = TreeView1.Nodes.Add(i,,,"Node " & CStr(i))

Next i

Set nodX = TreeView1.Nodes.Add(,,,"Bottom")	'添加一个带文本的节点。

Set nodX = TreeView1.Nodes.Add(i,,,"Expanded") '在节点中添加子节点。

Set nodX = TreeView1.Nodes.Add(i+1,,,"Show me") '添加最后的子节点。

End Sub

Private Sub Form_Click()

'在单击窗体时，树将滚动和展开。

TreeView1.Nodes(TreeView1.Nodes.Count).EnsureVisible

End Sub


Expand 事件（TreeView 控件）

在 TreeView 控件中的 Node 对象扩展开时，也就是它的子节点变成可视时，这个事件便发生。

语法

Private Sub object_Expand(ByVal node As Node)

Expand 事件的语法包含下面部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的一个对象。
node	对展开的 Node 对象的引用。
说明

Expand 事件发生在 Click 和 DblClick 事件之后。

Expand 事件的产生有三种方式：其一，双击带有子节点的 Node 对象；其二，将 Node 对象的 Expanded 属性设置为 True；其三，单击 ＋/－ 图象。使用 Expand 事件使一个对象有效，如以下例子所示：

Private Sub TreeView1_Expand(ByVal Node As Node)

If Node.Index <> 1 Then

Node.Expanded = False	'阻止扩展。

End If

End Sub


Expand 事件示例

这个例子在 TreeView 控件中添加几个 Node 对象。在一个 Node 被展开时，Expand 事件发生，并且显示关于 Node 的信息。为试用此例，要在窗体上安放一个 TreeView 控件，并在该窗体的声明部分粘贴下面的代码。运行此例，并展开各节点。

Private Sub Form_Load()

Dim nodX As Node

Set nodX = TreeView1.Nodes.Add(, , "RP", "Root Parent")

Set nodX = TreeView1.Nodes.Add("RP", tvwChild, "C1", "Child1")

Set nodX = TreeView1.Nodes.Add("C1", tvwChild, "C2", "Child2")

Set nodX = TreeView1.Nodes.Add("C2", tvwChild, "C3", " Child3")

Set nodX = TreeView1.Nodes.Add("C2", tvwChild, "C4", " Child4")

TreeView1.Style = tvwTreelinesPlusMinusText	'样式 6。

TreeView1.LineStyle = tvwRootLines	'样式 1。

End Sub

Private Sub TreeView1_Expand(ByVal Node As Node)

Select Case Node.Key Like "C*"

Case Is = True

MsgBox Node.Text & " is a child node."

End Select

End Sub


Expanded 属性

这个属性返回或设置一个值，该值确定在 TreeView 控件中的 Node 对象当前是被展开的还是被折叠的。

语法

object.Expanded[= boolean]

Expanded 属性的语法包含下面部分：

t部分	描述
object	对象表达式，其值是“应用于”列表中的一个对象。
boolean	布尔表达式，其值指定该节点是被展开的还是被折叠的。
boolean 的设置值是：

设置值	描述
True	该 Node 当前被展开。
False	该 Node 当前被折叠。
说明

可以使用 Expanded 属性编程展开 Node 对象。以下代码与双击第一个 Node 的作用相同：

TreeView1.Nodes(1).Expanded = True

在 Node 对象被展开时，Expand  事件发生。

如果一个 Node 对象没有子节点，则该属性值被忽略。


Expanded 属性示例

这个例子在 TreeView 控件中添加几个 Node 对象。在单击窗体时，每一个 Node 的 Expanded 属性均被设置为 True。为试用此例，要在窗体上安放 TreeView 控件并在窗体的声明部分粘贴该代码。运行此例，单击该窗体以展开全部 Node 对象。

Private Sub Form_Load()

Dim nodX As Node

Dim i as Integer

TreeView1.BorderStyle = vbFixedSingle '显示边框。

'创建一个根节点。

Set nodX = TreeView1.Nodes.Add(,,"root","Root")

For i = 1 to 5	'添加五个子节点。

Set nodX = TreeView1.Nodes.Add(i,tvwChild,,"Node " & CStr(i))

Next i

End Sub

Private Sub Form_Click()

Dim I as Integer

For I = 1 to TreeView1.Nodes.Count

'展开全部节点。

TreeView1.Nodes(i).Expanded = True

Next I

End Sub


ExpandedImage 属性

这个属性返回或设置在关联的 ImageList 控件中的 ListImage 对象的索引或键值，当 Node 对象被展开时，显示 ListImage 对象。

语法

object.ExpandedImage[ = number]

ExpandedImage 属性的语法包含下面部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的一个对象。
number	数值表达式或字符串表达式，其值分别指定被显示图象的索引值或键值。
说明

在双击 Node 对象，或 Node 对象的 Expanded 属性被设置为 True 时，该属性允许改变与 Node 对象相关联的图象。


FirstSibling 属性

这个属性返回对 TreeView 控件中的 Node 对象的第一个相邻对象的引用。

语法

object.FirstSibling

object 所在处代表一个对象表达式，其值是“应用于”列表中的一个对象

说明

第一个相邻节点是出现在一个节点层中第一个位置上的 Node。实际上到底是哪一个 Node 出现在第一个位置取决于在那一层上的 Node 对象是否被排序，这由 Sorted 属性确定。

Child、FirstSibling、LastSibling、Previous、Parent、Next 和 Root 属性都返回对另一个 Node 对象的引用。所以可以同时引用并执行对一个 Node 的操作，如下所示：

With TreeView1.Nodes(x).FirstSibling

.Text = "New text"

.Key = "New key"

.SelectedImage = 3

End With

也可以将对象变量设置为引用的 Node，如下所示：

Dim NodFirstSib As Node

'获取 Node x 的第一个相邻节点的引用。

Set NodFirstSib = TreeView1.Nodes(x).FirstSibling

'使用这个引用执行对第一个相邻 Node 的操作。

With nodFirstSib

.Text = "New text"	'改变文本。

.Key = "New key"	'改变键。

.SelectedImage = 3	'改变 SelectedImage.

End With


FirstSibling 属性示例

这个例子给 TreeView 控件添加几个节点。FirstSibling 属性，与 Next 属性和 LastSibling 属性联用，被用于在点取的 Node 对象的层中定位。为试用此例，要在窗体上安放一个 TreeView 控件并在窗体的声明部分粘贴该代码。运行此例，单击不同的节点来观察返回的是什么。

Private Sub Form_Load()

Dim nodX As Node

Set nodX = TreeView1.Nodes.Add(,,"dad","Mike") '第一个相邻的节点。

Set nodX = TreeView1.Nodes.Add(,,"mom","Carol")

Set nodX = TreeView1.Nodes.Add(,,,"Alice")

'Marsha 是第一个相邻节点。

Set nodX = TreeView1.Nodes.Add("mom",tvwChild,,"Marsha")

Set nodX = TreeView1.Nodes.Add("mom",tvwChild,,"Jan")

Set nodX = TreeView1.Nodes.Add("mom",tvwChild,,"Cindy")

nodX.EnsureVisible '显示全部节点。

'Greg 是第一个相邻节点。

Set nodX = TreeView1.Nodes.Add("dad",tvwChild,,"Greg")

Set nodX = TreeView1.Nodes.Add("dad",tvwChild,,"Peter")

Set nodX = TreeView1.Nodes.Add("dad",tvwChild,,"Bobby")

nodX.EnsureVisible '显示全部节点。

End Sub

Private Sub TreeView1_NodeClick(ByVal Node As Node)

Dim strText As String

Dim n As Integer

'设置 n 为第一个相邻节点的索引。

n = Node.FirstSibling.Index

'在字符串变量中安放第一个相邻节点文本和换行。

strText = Node.FirstSibling.Text & vbLF

While n <> Node.LastSibling.Index

'在 n 不是最后相邻节点的索引时，转到

'下一个相邻节点并将它的文本放到字符串变量中。

strText = strText & TreeView1.Nodes(n).Next.Text & vbLF

'设置 n 为下一个节点的索引。

n = TreeView1.Nodes(n).Next.Index

Wend

MsgBox strText	'显示结果。

End Sub


FullPath 属性

这个属性返回在 TreeView 控件中引用的 Node 对象的完整限定路径。当赋予该属性为字符串变量时，该字符串被设为具有指定索引的 FullPath 节点。

语法

object.FullPath

object 所在处代表一个对象表达式，其值是“应用于”列表中的一个对象。

说明

完整限定路径是引用的 Node 对象的 Text 属性中的文本与它的所有前辈的 Text 属性值的连接。PathSeparator 属性的值确定定界符。


FullPath 属性示例

这个例子为 TreeView 控件添加几个 Node 对象，并在每个对象被选中时显示其完整限定路径。为试用此例，要在窗体上安放一个 TreeView 控件并在窗体的声明部分粘贴该代码。运行此例，然后选择一个节点，单击窗体显示该 Node 对象的完整路径。

Private Sub Form_Load()

Dim nodX As Node

Set nodX = TreeView1.Nodes.Add(,,,"Root")

Set nodX = TreeView1.Nodes.Add(1,tvwChild,,"Dir1")

Set nodX = TreeView1.Nodes.Add(2,tvwChild,,"Dir2")

Set nodX = TreeView1.Nodes.Add(3,tvwChild,,"Dir3")

Set nodX = TreeView1.Nodes.Add(4,tvwChild,,"Dir4")

nodX.EnsureVisible	'显示全部节点。

TreeView1.Style = tvwTreelinesText '样式 4。

End Sub

Private Sub TreeView1_NodeClick(ByVal Node As Node)

MsgBox Node.FullPath

End Sub


GetVisibleCount 方法

这个方法返回固定在 TreeView 控件的内部区域的 Node 对象的个数。

语法

object.GetVisibleCount

object 所在处代表一个对象表达式，其值是“应用于”列表中的一个对象。

说明

Node 对象的个数取决于在一个窗口中能固定多少行。总的行数取决于控件的高度和 Font 对象的 Size 属性。该计数包括列表底部的只能看到一局部的项。

可以使用 GetVisibleCount 属性确保可视的最小行数，这样可以精确地访问一个层。如果最小行数是不可视的，可以用 Height 属性重新设置 TreeView 的大小。

如果一个 特定的 Node 对象必须是可视时，使用 EnsureVisible 方法来滚动和展开 TreeView 控件。


GetVisibleCount 方法示例

这个例子为 TreeView 控件添加几个 Node 对象。在单击窗体时，代码使用 GetVisibleCount 方法来校验有多少行是可视的，然后扩大控件以显示全部对象。为试用此例，要在窗体上放置一个 TreeView 控件并在窗体的声明部分粘贴该代码。运行此例，并单击窗体来扩大该控件。

Private Sub Form_Load()

Dim nodX As Node

Dim i as Integer

TreeView1.BorderStyle = 1 '显示边框。

For i = 1 to 20

Set nodX = TreeView1.Nodes.Add(,,,"Node " & CStr(i))

Next I

TreeView1.Height = 1500 '为了比较，缩短 TreeView。

End Sub

Private Sub Form_Click()

While Treeview1.GetVisibleCount < 20

'放大 treeview。

TreeView1.Height = TreeView1.Height + TreeView1.Font.Size

Wend

End Sub


HitTest 方法（ListView 和 TreeView 控件）

这个方法返回对位于 x 和 y 坐标的 ListItem 对象或 Node 对象的引用。通常与拖放操作一起使用，来确定放下的目标项在当前位置是否可用。

语法

object.HitTest (x As Single, y As Single)

HitTest 方法的语法包含下面部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的一个对象。
x,y	目标对象的坐标，它或是 Node 对象，或是 ListItem 对象。
说明

如果在指定的坐标没有对象，HitTest 方法返回 Nothing。

HitTest 方法常常与 DropHighlight 属性一起使用来突出鼠标所指的对象。DropHighlight 属性要求对指定要加亮的对象的引用。为了确定那个对象，HitTest 方法与返回 x 和 y 坐标的事件（如 DragOver 事件）一起使用，如下所示：

Private Sub TreeView1_DragOver _

(Source As Control, X As Single, Y As Single, State As Integer)

Set TreeView1.DropHighlight = TreeView1.HitTest(X,Y)

End Sub

在后面的 DragDrop 事件中使用 DropHighlight 属性来返回对源控件最终落在其上的对象的引用，如以下代码所示：

Private Sub TreeView1_DragDrop _

(Source As Control, x As Single, y As Single)

'DropHighlight 返回对其上发生放下的对象的引用。

Me.Caption = TreeView1.DropHighlight.Text

'为了释放 DropHighlight 引用，设置它为 Nothing。

Set TreeView1.DropHighlight = Nothing

End Sub

注意在上面例子中，在过程完成之后，属性被设置为 Nothing。为了释放突出显示作用，必须这样做。


HitTest 方法（ListView 和 TreeView 控件）示例

这个例子在 TreeView 控件中添加几个 Node 对象。在选择了一个 Node 对象之后，可以将它拖动到任何其它 Node。为试用此例，要在窗体上安放 TreeView 和 ImageList 控件，并在窗体的声明部分粘贴该代码。运行此例，并且在附近拖动一些 Node 对象来观察结果。

'声明全局变量。

Dim indrag As Boolean '指示拖放操作的标志。

Dim nodX As Object '要拖动的项。

Private Sub Form_Load()

'在 Imagelist 控件中加载一个位图。

Dim imgX As ListImage

Dim BitmapPath As String

BitmapPath = "icons\mail\mail01a.ico"

Set imgX = imagelist1.ListImages.Add(, , LoadPicture(BitmapPath))

'初始化 TreeView 控件，并创建若干节点。

TreeView1.ImageList = imagelist1

Dim nodX As Node	'创建树。

Set nodX = TreeView1.Nodes.Add(, , , "Parent1", 1)

Set nodX = TreeView1.Nodes.Add(, , , "Parent2", 1)

Set nodX = TreeView1.Nodes.Add(1, tvwChild, , "Child 1", 1)

Set nodX = TreeView1.Nodes.Add(1, tvwChild, , "Child 2", 1)

Set nodX = TreeView1.Nodes.Add(2, tvwChild, , "Child 3", 1)

Set nodX = TreeView1.Nodes.Add(2, tvwChild, , "Child 4", 1)

Set nodX = TreeView1.Nodes.Add(3, tvwChild, , "Child 5", 1)

nodX.EnsureVisible '展开树以显示全部节点。

End Sub

Private Sub TreeView1_MouseDown_

(Button As Integer, Shift As Integer, x As Single, y As Single)

Set nodX = TreeView1.SelectedItem '设置要拖动的项。

End Sub

Private Sub TreeView1_MouseMove _

(Button As Integer, Shift As Integer, x As Single, y As Single)

If Button = vbLeftButton Then '指示一个拖动操作。

indrag = True '设置 flag 为 true。

'使用CreateDragImage方法设置拖动图标。

TreeView1.DragIcon = TreeView1.SelectedItem.CreateDragImage

TreeView1.Drag vbBeginDrag '拖动操作。

End If

End Sub

Private Sub TreeView1_DragDrop_

(Source As Control, x As Single, y As Single)

If TreeView1.DropHighlight Is Nothing Then

Set TreeView1.DropHighlight = Nothing

indrag = False

Exit Sub

Else

If nodX = TreeView1.DropHighlight Then Exit Sub

Cls

Print nodX.Text & " dropped on " & TreeView1.DropHighlight.Text

Set TreeView1.DropHighlight = Nothing

indrag = False

End If

End Sub

Private Sub TreeView1_DragOver(Source As Control, x As Single, y As Single, State As Integer)

If indrag = True Then

'设置 DropHighlight 为鼠标坐标。

Set TreeView1.DropHighlight = TreeView1.HitTest(x, y)

End If

End Sub


Indentation 属性

这个属性为 TreeView 控件返回或设置缩进宽度。每个新的子 Node 对象均按这个量缩进。

语法

object.Indentation[ = number]

Indentation 属性的语法包含下面部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的一个对象。
number	指定每个子 Node 的缩进宽度的整数。
说明

如果在运行时改变 Indentation 属性，则按照新的宽度重新绘制 TreeView 。属性值不能为负。


Indentation 属性示例

这个例子为 TreeView 控件添加几个 Node 对象，同时 Indentation 属性被显示在窗体的标题中。OptionButton 控件数组为 Indentation 宽度提供替换值。为试用此例，要在窗体中添加 TreeView 控件和具有三个 OptionButton 控件的控件数组，并在窗体的声明部分粘贴该代码。运行此例，并单击 OptionButton 以改变 Indentation 属性。

Private Sub Form_Load()

'用缩进选择标记选项按钮控件。

Option1(0).Caption = "250"

Option1(1).Caption = "500"

Option1(2).Caption = "1000"

'选择第一个选项，将缩进初始化为 250。

Option1(0).Value = True

Treeview1.Indentation = 250

Dim nodX As Node

Dim i As Integer

Set nodX = TreeView1.Nodes.Add(,,,CStr(1)) '添加第一个节点。

For i = 1 To 6	'添加六个节点。

Set nodX = TreeView1.Nodes.Add(i,tvwChild,,CStr(i + 1))

Next i

nodX.EnsureVisible	'确保全部节点都是可视的。

Form1.Caption = "Indentation = " & TreeView1.Indentation

End Sub

Private Sub Option1_Click(Index as Integer)	'用选项按钮值改变缩进宽度。

TreeView1.Indentation = Val(Option1(Index).Caption)

Form1.Caption = "Indentation = " & TreeView1.Indentation

End Sub


LabelEdit 属性

这个属性返回或设置一个值，它确定是否可以编辑在 ListView 或 TreeView 控件中的 ListItem 或 Node 对象的标签。

语法

object.LabelEdit [ = integer]

LabelEdit 属性的语法包含下面部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的一个对象。
integer	整数，它确定 Node 或 ListItem 对象的标签是否可以被编辑，如设置值中所说明。
设置值

integer 的设置值是：

常数	值	描述
ListView:   lvwAutomatic TreeView:   tvwAutomatic	0	（缺省）自动的。BeforeLabelEdit 事件发生在单击选中的节点的标签时。
ListView:   lvwManual TreeView:   tvwManual	1	手动的。BeforeLabelEdit 事件只发生在调用 StartLabelEdit 方法时。
说明

在选中的对象被单击（如果 LabelEdit 属性被设置为 Automatic）时，对象的标签编辑被启动。也就是说，第一次单击使对象被选中，第二次单击启动该对象的标签编辑操作。

LabelEdit 属性与 StartLabelEdit 方法联用，允许编程确定何时与哪个标签可被编辑。当 LabelEdit 属性设置为1时，除非 StartLabelEdit 方法被调用，否则就没有可编辑的标签。例如，以下的代码只要单击命令按钮，就可以来编辑一个 Node 对象的标签。

Private Sub Command1_Click()

'确定 right Node 是否正是被选择的节点。

If TreeView1.SelectedItem.Index = 1 Then

TreeView1.StartLabelEdit ' 可以开始编辑。

End If

End Sub


LabelEdit 属性示例

这个例子在单击命令按钮时，开始标签编辑。它允许编辑一个 Node 对象，除非它是个根 Node。LabelEdit 属性必须被设置为 Manual。为试用此例，要在窗体上安放 TreeView 控件和 CommandButton。在窗体的声明部分粘贴该代码。运行此例，选择要编辑的节点，并按CommandButton。

Private Sub Form_Load()

Dim nodX As Node

Dim i As Integer

TreeView1.LabelEdit = tvwManual	'将属性设置为手控。

Set nodX = TreeView1.Nodes.Add(,,," Node 1")	'添加第一个节点。

For i = 1 to 5	'添加五个节点。

Set nodX = TreeView1.Nodes.Add(i,tvwChild,,"Node " & CStr(i + 1))

Next I

nodX.EnsureVisible	'显示全部节点。

End Sub

Private Sub Command1_Click()

'对选择的节点调用 StartLabelEdit 方法，

'它触发 BeforeLabelEdit 事件。

TreeView1.StartLabelEdit

End Sub

Private Sub TreeView_BeforeLabelEdit (Cancel as Integer)

'如果选择的项是根节点，则取消编辑。

If TreeView1.SelectedItem Is TreeView1.SelectedItem.Root Then

Cancel = True

End If

End Sub

Private Sub TreeView_AfterLabelEdit _

(Cancel As Integer, NewString As String)

'假设已输入了若干文本并按了 ENTER 键。

'任何非空字符串将有效。

If Len(NewString) = 0 Then

Cancel = True

End If

End Sub


LastSibling 属性

这个属性返回对 TreeView 控件中的 Node 对象的最后相邻节点的引用。

语法

object.LastSibling

object 所在处代表一个对象表达式，其值是“应用于”列表中的一个对象。

说明

最后的相邻节点是出现在一个节点层中最后位置上的 Node。实际上哪个 Node 出现在最后位置上取决于在那一层上的 Node 是否被排序，这由 Sorted 属性所确定。为了排序同一层上的 Node 对象，应把 Parent 节点的 Sorted 属性设置为 True。请参阅下面的代码：

Private Sub TreeView1_NodeClick(ByVal Node As Node)

Node.Parent.Sorted = True

End Sub

Child、FirstSibling、LastSibling、Previous、Parent、Next 和 Root 属性均返回对另一个 Node 对象的引用。所以，可以同时引用并执行对一个 Node 的操作，如下所示：

With TreeView1.Nodes(x).LastSibling

.Text = "New text"

.Key = "New key"

.SelectedImage = 3

End With

也可以将对象变量设置为引用的 Node，如下所示：

Dim NodLastSib As Node

'获得对节点 x 的最后相邻节点的引用。

Set NodLastSib = TreeView1.Nodes(x).LastSibling

'使用这个引用执行对相邻节点的操作。

With nodLastSib

.Text = "New text"	'改变文本。

.Key = "New key"	'改变键。

.SelectedImage = 3	'改变 SelectedImage。

End With


LastSibling 属性示例

这个例子为 TreeView 控件添加几个 Node 对象。LastSibling 属性与 Next 属性和 FirstSibling 属性联用，在点取的 Node 对象的层上定位。为试用此例，要在窗体上安放 TreeView 控件，并在窗体的声明部分粘贴该代码。运行此例，并单击不同的节点，来观察返回的是什么。

Private Sub Form_Load()

Dim nodX As Node

Set nodX = TreeView1.Nodes.Add(,,"dad","Mike")

Szet nodX = TreeView1.Nodes.Add(,,"mom","Carol")

'Alice 是最后的相邻节点。

Set nodX = TreeView1.Nodes.Add(,,,"Alice")

Set nodX = TreeView1.Nodes.Add("mom",tvwChild,,"Marsha")

Set nodX = TreeView1.Nodes.Add("mom",tvwChild,,"Jan")

'Cindy 是最后的相邻节点。

Set nodX = TreeView1.Nodes.Add("mom",tvwChild,,"Cindy")

nodX.EnsureVisible '显示全部节点。

Set nodX = TreeView1.Nodes.Add("dad",tvwChild,,"Greg")

Set nodX = TreeView1.Nodes.Add("dad",tvwChild,,"Peter")

'Bobby 是最后的相邻节点。

Set nodX = TreeView1.Nodes.Add("dad",tvwChild,,"Bobby")

nodX.EnsureVisible '显示全部节点。

End Sub

Private Sub TreeView1_NodeClick(ByVal Node As Node)

Dim strText As String

Dim n As Integer

'设置 n 为第一个相邻节点的索引。

n = Node.FirstSibling.Index

'在字符串变量中安放第一个相邻节点的文本和换行。

strText = Node.FirstSibling.Text & vbLF

While n <> Node.LastSibling.Index

'当 n 不是最后相邻节点的索引时，转向下一个相邻的节点

'并将它的文本安放到字符串变量中。

strText = strText & TreeView1.Nodes(n).Next.Text & vbLF

'设置 n 为下一个节点的索引。

n = TreeView1.Nodes(n).Next.Index

Wend

MsgBox strText '显示结果。

End Sub


LineStyle 属性

这个属性返回或设置在 Node 对象之间显示的线的样式。

语法

object.LineStyle [ = number]

LineStyle 属性的语法包含下面部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的一个对象。
number	值或常数，它指定线的样式，如设置值所示：
设置值

number 的设置值是：

常数	值	描述
tvwTreeLines	0	（缺省）三线。显示在 Node 相邻节点和它们的父 Node 之间的线。
tvwRootLines	1	根线。除了显示在 Node 相邻节点和它们的父 Node 之间的线以外，还显示根节点之间的线。
说明

必须将 Style 属性设置为包括三线的样式。


LineStyle 和 Style 属性示例

这个例子为 TreeView 控件添加几个带有图象的 Node 对象。可以通过选择在两个 OptionButton 控件数组中的替换样式的办法来改变 LineStyle 和 Style 属性。为试用此例，要在窗体上安放一个 TreeView 控件、一个 ImageList 控件和两个 OptionButton 控件数组（一个有两个按钮，另一个有八个按钮），并在窗体的声明部分粘贴该代码。运行此例，并单击任何一个 OptionButton 来改变 LineStyle 和 Style 属性。

Private Sub Form_Load()

'在 ImageList 控件中添加一个图象。

Dim imgX As ListImage

Set imgX = ImageList1.ListImages. _

Add(,,LoadPicture("bitmaps\outline\leaf.bmp"))

TreeView1.ImageList = ImageList1 '初始化ImageList。

'用线样式的选择标记 OptionButton 控件。

Option1(0).Caption = "TreeLines"

Option1(1).Caption = "RootLines"

'选择第一个选项，一开始先设置 LineStyle 为 TreeLines。

Option1(0).Value = True

Treeview1.LineStyle = tvwTreeLines

'用样式的选择标记 OptionButton 控件。

Option2(0).Caption = "Text only"

Option2(1).Caption = "Image & text"

Option2(2).Caption = "Plus/minus & text"

Option2(3).Caption = "Plus/minus, image & text"

Option2(4).Caption = "Lines & text"

Option2(5).Caption = "Lines, image & Text"

Option2(6).Caption = "Lines, plus/minus & Text"

Option2(7).Caption = "Lines, plus/minus, image & text"

'选择最后的选项，并设置初始的样式。

Option2(7).Value = True

Treeview1.Style = tvwTreelinesPlusMinusPictureText

Dim nodX As Node

Dim i as Integer

'创建根节点。

Set nodX = TreeView1.Nodes.Add(,,,"Node " & "1",1)

For i = 1 to 5	'添加五个节点。

Set nodX = TreeView1.Nodes. _

Add(i,tvwChild,,"Node " & CStr(i + 1),1)

Next I

nodX.EnsureVisible	'显示全部节点。

End Sub

Private Sub Option1_Click(Index as Integer)

'通过 OptionButton 改变线的样式。

TreeView1.LineStyle = Index

End Sub

Private Sub Option2_Click(Index as Integer)

'通过 OptionButton 改变样式。

TreeView1.Style = Index

Form1.Caption = "TreeView Style = " & Option2(Index).Caption

End Sub


Next 属性

这个属性返回对 TreeView 控件的 Node 对象的下一个相邻 Node 的引用。

语法

object.Next

object 所在处代表一个对象表达式，其值是“应用于”列表中的一个对象。

说明

Child、FirstSibling、LastSibling、Previous、Parent、Next 和 Root 属性均返回对另一个 Node 对象的引用。所以可以同时引用并执行对一个 Node 的操作，如下所示：

With TreeView1.Nodes(x).Child

.Text = "New text"

.Key = "New key"

.SelectedImage = 3

End With

也可以将对象变量设置为引用的 Node，如下：

Dim NodChild As Node

'获得对节点 x 的子节点的引用。

Set NodChild = TreeView1.Nodes(x).Child

'使用这个引用来执行对子节点的操作。

With nodChild

.Text = "New text"	'改变文本。

.Key = "New key"	'改变键。

.SelectedImage = 3	'改变 SelectedImage.

End With


Next 属性示例

这个例子为 TreeView 控件添加几个 Node 对象。LastSibling 属性和 Next 属性与 FirstSibling 属性联用，在点取的 Node 对象的层上定位。为试用此例，要在窗体上安放一个 TreeView 控件，并在窗体的声明部分粘贴该代码。运行此例，单击不同的节点来观察返回的是什么。

Private Sub Form_Load()

Dim nodX As Node

Set nodX = TreeView1.Nodes.Add(,,"dad","Mike")

Set nodX = TreeView1.Nodes.Add(,,"mom","Carol")

'Alice 是最后的相邻节点。

Set nodX = TreeView1.Nodes.Add(,,,"Alice")

Set nodX = TreeView1.Nodes.Add("mom",tvwChild,,"Marsha")

Set nodX = TreeView1.Nodes.Add("mom",tvwChild,,"Jan")

'Cindy 是最后的相邻节点。

Set nodX = TreeView1.Nodes.Add("mom",tvwChild,,"Cindy")

nodX.EnsureVisible '显示全部节点。

Set nodX = TreeView1.Nodes.Add("dad",tvwChild,,"Greg")

Set nodX = TreeView1.Nodes.Add("dad",tvwChild,,"Peter")

'Bobby 是最后的相邻节点。

Set nodX = TreeView1.Nodes.Add("dad",tvwChild,,"Bobby")

nodX.EnsureVisible '显示全部节点。

End Sub

Private Sub TreeView1_NodeClick(ByVal Node As Node)

Dim strText As String

Dim n As Integer

'设置 n 为第一个相邻节点的索引。

n = Node.FirstSibling.Index

'在字符串变量中安放第一个相邻节点的文本和换行。

strText = Node.FirstSibling.Text & vbLF

'当 n 不是最后相邻节点的索引时，转向下一个相邻节点，

'并将其文本安放到字符串变量中。

While n <> Node.LastSibling.Index

strText = strText & TreeView1.Nodes(n).Next.Text & vbLF

'设置 n 为下一个节点的索引。

n = TreeView1.Nodes(n).Next.Index

Wend

MsgBox strText '显示结果。

End Sub


NodeClick 事件

在一个 Node 对象被单击时，这个事件便发生。

语法

Private Sub object_NodeClick(ByVal node As Node)

NodeClick 事件的语法包含下面部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的一个对象。
node	对被点取的 Node 对象的引用。
说明

在单击节点对象之外的 TreeView 控件的任何部位，标准的 Click 事件发生。当单击某个特定的 Node 对象时，NodeClick 事件发生；NodeClick 事件也返回对特定的 Node 对象的引用，在下一步操作之前，这个引用可用来使这个 Node 对象可用。

NodeClick 事件发生在标准的 Click 事件之前。


NodeClick 事件示例

这个例子为 TreeView 控件添加几个 Node 对象。在单击一个 Node 时，NodeClick 事件被触发，并用于获取该 Node 对象的索引和文本。为试用此例，要在窗体中添加一个 TreeView 控件并在窗体的声明部分粘贴该代码。运行此例，并单击任何 Node。

Private Sub Form_Load()

Dim nodX As Node

Set nodX = TreeView1.Nodes.Add(,,"R","Root")

nodX.Expanded = True

Set nodX = TreeView1.Nodes.Add(,,"P","Parent")

nodX.Expanded = True

Set nodX = TreeView1.Nodes.Add("R",tvwChild,,"Child 1")

Set nodX = TreeView1.Nodes.Add("R",tvwChild,,"Child 2")

Set nodX = TreeView1.Nodes.Add("R",tvwChild,,"Child 3")

Set nodX = TreeView1.Nodes.Add("P",tvwChild,,"Child 4")

Set nodX = TreeView1.Nodes.Add("P",tvwChild,,"Child 5")

Set nodX = TreeView1.Nodes.Add("P",tvwChild,,"Child 6")

End Sub

Private Sub TreeView1_NodeClick(ByVal Node As Node)

Form1.Caption = "Index = " & Node.Index & " Text:" & Node.Text

End Sub


Nodes 属性

这个属性返回对 TreeView 控件的 Node 对象的集合的引用。

语法

object.Nodes

object 所在处代表一个对象表达式，其值是“应用于”列表中的一个对象。

说明

可以使用标准的集合方法（例如 Add 和 Remove 方法）操作 Node 对象。可以按其索引或存储在 Key 属性中的唯一键来访问集合中的每个元素。


Nodes 属性示例

这个例子为 TreeView 控件添加几个 Node 对象。在单击窗体时，对每个 Node 的引用被用于显示每个 Node 对象的文本。为试用此例，要在窗体上安放一个 TreeView 控件并在窗体的声明部分粘贴该代码。运行此例且单击该窗体。

Private Sub Form_Load()

Dim nodX As Node

Set nodX = TreeView1.Nodes.Add(,,"R","Root")

Set nodX = TreeView1.Nodes.Add("R", tvwChild,"C1","Child 1")

Set nodX = TreeView1.Nodes.Add("R", tvwChild,"C2","Child 2")

Set nodX = TreeView1.Nodes.Add("R", tvwChild,"C3","Child 3")

Set nodX = TreeView1.Nodes.Add("R", tvwChild,"C4","Child 4")

nodX.EnsureVisible

TreeView1.Style = tvwTreelinesText '样式 4。

TreeView1.BorderStyle = vbFixedSingle

End Sub

Private Sub Form_Click()

Dim i As Integer

Dim strNodes As String

For i = 1 To TreeView1.Nodes.Count

strNodes = strNodes & TreeView1.Nodes(i).Index & " " & _

"Key: " & TreeView1.Nodes(i).Key & " " & _

"Text: " & TreeView1.Nodes(i).Text & vbLF

Next i

MsgBox strNodes

End Sub


Parent 属性（Node 对象）

这个属性返回或设置 Node 对象的父对象。仅在运行时可用。

语法

object.Parent[ = node]

Parent 属性的语法包含下面部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的一个对象。
node	变成该对象的父对象的 Node 对象。
说明

在运行时，设置这个属性为一个对象的操作不能搞成一个循环，否则便发生错误。例如，不能将任何 Node 设置成为其后代的子 Node。

Child、FirstSibling、LastSibling、Previous、Parent、Next 和 Root 属性都返回对另一个 Node 对象的引用。所以可以同时引用并执行对一个 Node 的操作，如下所示：

With TreeView1.Nodes(x).Parent

.Text = "New text"

.Key = "New key"

.SelectedImage = 3

End With

也可以将对象变量设置为引用的 Node，如下所示：

Dim NodParent As Node

'获取对节点 x 的父节点的引用。

Set NodParent = TreeView1.Nodes(x).Parent

'使用这个引用来执行对父节点的操作。

With nodParent

.Text = "New text"	'改变该文本。

.Key = "New key"	'改变键。

.SelectedImage = 3	'改变 SelectedImage。

End With


Parent 属性（Node 对象）示例

这个例子为 TreeView 控件添加几个 Node 对象。在选择了 Node 对象后，可以单击并拖动它到任何其它 Node，以使它成为该目标 Node 的子节点。为试用此例，要在窗体上安放 TreeView 和 ImageList 控件，并在该窗体的声明部分粘贴该代码。运行此例，并将一些 Node 对象拖动到其它 Node 对象之上来观察结果。

'声明全局变量。

Dim indrag As Boolean '指示拖放操作的标志。

Dim nodX As Object '要拖动的项。

Private Sub Form_Load()

'在 Imagelist 控件中加载一个位图。

Dim imgX As ListImage

Dim BitmapPath As String

BitmapPath = "icons\mail\mail01a.ico"

Set imgX = ImageList1.ListImages.Add(, , LoadPicture(BitmapPath))

'初始化 TreeView 控件并创建几个节点。

TreeView1.ImageList = ImageList1

Dim nodX As Node	'创建树。

Set nodX = TreeView1.Nodes.Add(, , , "Parent1", 1)

Set nodX = TreeView1.Nodes.Add(, , , "Parent2", 1)

Set nodX = TreeView1.Nodes.Add(1, tvwChild, , "Child 1", 1)

Set nodX = TreeView1.Nodes.Add(1, tvwChild, , "Child 2", 1)

Set nodX = TreeView1.Nodes.Add(2, tvwChild, , "Child 3", 1)

Set nodX = TreeView1.Nodes.Add(2, tvwChild, , "Child 4", 1)

Set nodX = TreeView1.Nodes.Add(3, tvwChild, , "Child 5", 1)

nodX.EnsureVisible '展开树，显示全部节点。

End Sub

Private Sub TreeView1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)

Set nodX = TreeView1.SelectedItem '设置要拖动的项。

Set TreeView1.DropHighlight = Nothing

End Sub

Private Sub TreeView1_MouseMove _

(Button As Integer, Shift As Integer, x As Single, y As Single)

If Button = vbLeftButton Then '指示拖动操作。

indrag = True '设置标志为 true。

'用 CreateDragImage 方法设置拖动图标。

TreeView1.DragIcon = TreeView1.SelectedItem.CreateDragImage

TreeView1.Drag vbBeginDrag '拖动操作。

End If

End Sub

Private Sub TreeView1_DragDrop(Source As Control, x As Single, y As Single)

'如果用户没移动鼠标，或在无效区释放它。

If TreeView1.DropHighlight Is Nothing Then

indrag = False

Exit Sub

Else

'设置被拖动的节点的 parent 属性为目标节点。

On Error GoTo checkerror '阻止循环错误。

Set nodX.Parent = TreeView1.DropHighlight

Cls

Print TreeView1.DropHighlight.Text & _

" is parent of " & nodX.Text

'释放 DropHighlight 引用。

Set TreeView1.DropHighlight = Nothing

indrag = False

Exit Sub '如未发生错误则退出。

End If

checkerror:

'定义表示 Visual Basic 错误代码的常数。

Const CircularError = 35614

If Err.Number = CircularError Then

Dim msg As String

msg = "A node can't be made a child of its own children."

'显示带有一个感叹号图标

'和“确定”与“取消”按钮的消息框。

If MsgBox(msg, vbExclamation & vbOKCancel) = vbOK Then

'释放 DropHighlight 引用。

indrag = False

Set TreeView1.DropHighlight = Nothing

Exit Sub

End If

End If

End Sub

Private Sub TreeView1_DragOver(Source As Control, x As Single, y As Single, State As Integer)

Set TreeView1.DropHighlight = TreeView1.HitTest(x, y)

End Sub


PathSeparator 属性（TreeView控件）

返回或设置分界符，该分界符用于由 FullPath 属性返回的路径。

语法

object.PathSeparator [ = string]

PathSeparator 语法包含下面部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的一个对象。
string	确定 PathSeparator 的字符串，通常是单个字符。
说明

缺省字符是“\.”。


PathSeparator 属性示例

这个例子添加几个 Node 对象到 TreeView 控件，并用 OptionButton 控件数组改变 PathSeparator 属性。为试用此例，在窗体上放置 TreeView 控件和 OptionButton 控件数组，并粘贴下面的代码到窗体的声明部分。运行此例，选择一个 Node，并单击窗体。用 OptionButtons 改变 PathSeparator 属性值。

Private Sub Form_Load

TreeView1.BorderStyle = vbFixedSingle   '显示边框。

'用样式选择标记 OptionButton 控件。

Option1(0).Caption = "/"

Option1(1).Caption = "-"

Option1(2).Caption = ":"

'选择最后选项，并设置初始样式。

Option2(1).Value = True

Treeview1.PathSeparator = Option1(1).Caption

Dim nodX As Node

Dim i As Integer

Set nodX = TreeView1.Nodes.Add(,,,CStr(1)) 	'添加第一个节点。

For i = 1 to 5	'添加其它的节点。

Set nodX = TreeView1.Nodes.Add(i,tvwChild,,CStr(i + 1))

Next i

nodX.EnsureVisible	'保证全部都是可见的。

End Sub

Private Sub Option1_Click(Index as Integer)

'改变分界符。

TreeView1.PathSeparator = Option1(Index).Caption

End Sub

Private Sub TreeView1_NodeClick(ByVal Node As Node)

'在窗体标题上显示路径。

Me.Caption = Node.FullPath

End Sub


Previous 属性（Node 对象）

返回对 Node 对象的前一个相邻节点的引用。

语法

object. Previous

object 所在处代表一个对象表达式，其值是“应用于”列表中的一个对象。

说明

Child、FirstSibling、LastSibling、Previous、Parent、Next 和 Root 属性全部返回对另一个 Node 对象的引用，因此，可以同时引用并执行对 Node 的操作，如下所示：

With TreeView1.Nodes(x).Previous

.Text = "New text"

.Key = "New key"

.SelectedImage = 3

End With

也可以将对象变量设置为引用的 Node，如下所示：

Dim NodPrevious As Node

'获得对节点 x 的前一个相邻节点的引用。

Set NodChild = TreeView1.Nodes(x).Previous

'用此引用执行对前一个相邻节点的操作。

With nodPrevious

.Text = "New text"	'改变文本。

.Key = "New key"	'改变键。

.SelectedImage = 3	'改变 SelectedImage。

End With


Previous 属性示例

这个例子添加几个节点到 TreeView 控件。在与 LastSibling 属性和 FirstSibling 属性联用时，Previous 属性用于在被点取的 Node 对象的层上定位。为试用此例，在窗体上放置 TreeView 控件，并粘贴下面的代码到窗体的声明部分。运行此例，并单击各个节点来查看返回什么。

Private Sub Form_Load()

Dim nodX As Node

Set nodX = TreeView1.Nodes.Add(, , "r", "Root")

Set nodX = TreeView1.Nodes.Add(, , "p", "parent")

Set nodX = TreeView1.Nodes.Add("r", tvwChild, , "Child 1")

Set nodX = TreeView1.Nodes.Add("r", tvwChild, , "Child 2")

Set nodX = TreeView1.Nodes.Add("r", tvwChild, , "Child 3")

nodX.EnsureVisible '显示所有节点。

Set nodX = TreeView1.Nodes.Add("p", tvwChild, , "Child 4")

Set nodX = TreeView1.Nodes.Add("p", tvwChild, , "Child 5")

Set nodX = TreeView1.Nodes.Add("p", tvwChild, , "Child 6")

nodX.EnsureVisible '显示全部节点。

End Sub

Private Sub TreeView1_NodeClick(ByVal Node As Node)

Dim strText As String

Dim n As Integer

'设置 n 为最后的相邻节点的索引。

n = Node.LastSibling.Index

'把最后的相邻节点的文本和换行放到字符串变量中。

strText = Node.LastSibling.Text & vbLF

While n <> Node.FirstSibling.Index

'当 n 不是第一个相邻节点的索引时，

'转向前一个相邻节点，并把它的文本放到字符串变量中。

strText = strText & TreeView1.Nodes(n).Previous.Text & vbLF

'设置 n 为前一个相邻节点的索引。

n = TreeView1.Nodes(n).Previous.Index

Wend

MsgBox strText '显示结果。

End Sub


Root 属性(Node 对象）

返回对所选 Node 的根 Node 对象的引用。

语法

object.Root

object 所在处代表是对象表达式，其值是“应用于”列表中的对象

说明

Child、FirstSibling、LastSibling、Previous、Parent、Next 和 Root 各属性全将返回对另一个 Node 对象的引用。因此，可以同时引用并执行对 Node 的操作，如下所示：

With TreeView1.Nodes(x).Root

.Text = "New text"

.Key = "New key"

.SelectedImage = 3

End With

也可以将对象变量设置为被引用的 Node，如下所示：

Dim NodRoot As Node

'得到对节点 x 的根的引用。

Set NodRoot = TreeView1.Nodes(x).Root

'用此引用执行对根节点的操作。

With nodRoot

.Text = "New text"	'改变文本。

.Key = "New key"	'改变键。

.SelectedImage = 3	'改变 SelectedImage。

End With


Root 属性示例

这个例子添加几个 Node 对象到 TreeView 控件，当单击 Node 时，代码沿树向上漫游直到 Root 节点，并且显示每一个 Parent 节点的文本。为试用此例，在窗体上放置 TreeView 控件，并粘贴下面的代码到窗体的声明部分。运行此例，并单击 Node。

Private Sub Form_Load()

Dim nodX As Node	'创建树。

Set nodX = TreeView1.Nodes.Add(,,"r", "Root")

Set nodX = TreeView1.Nodes.Add(,,"p", "Parent")

Set nodX = TreeView1.Nodes.Add("p",tvwChild,, "Child 1")

nodX.EnsureVisible	'显示全部节点。

Set nodX = TreeView1.Nodes.Add("r",tvwChild,"C2", "Child 2")

Set nodX = TreeView1.Nodes.Add("C2",tvwChild,"C3", "Child 3")

Set nodX = TreeView1.Nodes.Add("C3",tvwChild,, "Child 4")

Set nodX = TreeView1.Nodes.Add("C3",tvwChild,, "Child 5")

nodX.EnsureVisible	'显示全部节点。

End Sub

Private Sub TreeView1_NodeClick(ByVal Node As Node)

Dim n As Integer

Dim strParents As String 	'信息变量。

n = Node.Index	'设置 n 为被点取节点的索引。

strParents = Node.Text & vbLF

While n <> Node.Root.Index

strParents = strParents & _

TreeView1.Nodes(n).Parent.Text & vbLF

'设置 n 为下一个父节点的索引。

n = TreeView1.Nodes(n).Parent.Index

Wend

MsgBox strParents

End Sub


Selected 属性（ActiveX 控件）

返回或设置确定 Node 或 Tab 对象是否被选中的值。对于 ListItem 对象，Selected 属性不设置 SelectedItem 属性，这样就不会使对象被选中。它仅返回一值，表明是否已用其它方法选中了 ListItem 对象。

语法

object.Selected [ = boolean]

Selected 属性语法包含下面部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的一个对象。
boolean	布尔表达式，指明对象是否已被选中。
说明

用 Selected 属性编程选择指定的 Node 或 Tab 对象。一旦用此法选定了对象，就可对此对象执行各种操作，如设置各种属性及调用各种方法。

为选择指定的 Node 对象，必须通过它的 Index 属性或 Key 属性的值去引用它。下面的例子是在 TreeView 控件中选择指定的 Node 对象：

Private Sub Command1_Click()

TreeView1.Nodes(3).Selected = True '选择对象。

'用 SelectedItem 属性得到对该对象的引用。

TreeView1.SelectedItem.Text = "Changed Text"

End Sub

在 ListView 控件中，SelectedItem 属性总是引用第一个选中的项，因此，如多个项被选中，必须遍历所有选中的项，以校验每个项的 Selected 属性。

注意   不用 Select 属性去编程选择 ListItem 对象，而用带有 SelectedItem 属性的 Set 语句，如：

Set ListView1.SelectedItem = ListView1.ListItems(1)


Selected 属性示例

这个例子添加几个 Node 对象到 TreeView 控件。当选定 Node 时，对选定的 Node 的引用被用来显示它的键。为试用此例，在窗体上放置 TreeView 控件，并粘贴下面的代码到窗体的声明部分。运行此例，选择 Node 并单击窗体。

Private Sub Form_Load()

Dim nodX As Node	'创建树。

Set nodX = TreeView1.Nodes.Add(,,"r","Root")

Set nodX = TreeView1.Nodes.Add(,,"p","Parent")

Set nodX = TreeView1.Nodes.Add("p",tvwChild,,"Child 1")

nodX.EnsureVisible	'显示全部节点。

Set nodX = TreeView1.Nodes.Add("r",tvwChild,"C2","Child 2")

Set nodX = TreeView1.Nodes.Add("C2",tvwChild,"C3","Child 3")

Set nodX = TreeView1.Nodes.Add("C3",tvwChild,,"Child 4")

Set nodX = TreeView1.Nodes.Add("C3",tvwChild,,"Child 5")

nodX.EnsureVisible	'显示全部节点。

End Sub

Private Sub Form_Click()

Dim intX As Integer

On Error Resume Next	'如果整数未输入。

intX = InputBox("Check Node",,TreeView1.SelectedItem.Index)

If IsNumeric(intX) Then	'确保整数已输入。

If TreeView1.Nodes(intX).Selected = True Then

MsgBox TreeView1.Nodes(intX).Text & " is selected."

Else

MsgBox "Not selected"

End If

End If

End Sub

下面例子添加三个 ListItem 对象到 ListView 控件。当单击窗体时，代码用 Selected 属性来确定指定的 ListView 对象是否被选中。为试用此例，在窗体上放置 ListView 控件并粘贴下面的代码到窗体的声明部分。运行此例，选择 ListView，并单击窗体。

Private Sub Form_Load()

Listview1.BorderStyle = vbFixedSingle  '显示边框。

Dim itmX As ListViewItem

Set itmX = ListView1.ListItems.Add(,,"Item 1")

Set itmX = ListView1.ListItems.Add(,,"Item 2")

Set itmX = ListView1.ListItems.Add(,,"Item 3")

End Sub

Private Sub Form_Click()

Dim intX As Integer

On Error Resume Next '如果整数未输入。

intX = InputBox("Check Item", , Listview1.SelectedItem.Index)

If IsNumeric(intX) Then	'确保整数已输入。

If ListView1.ListItems(intX).Selected = True Then

MsgBox ListView1.ListItems(intX).Text & " is selected."

Else

MsgBox "Not selected"

End If

End If

End Sub


SelectedImage 属性

返回或设置在相关的 ImageList 控件中的 ListImage 对象的索引值或键值；当 Node 对象被选中时显示 ListImage。

语法

object.SelectedImage [ = index]

SelectedImage 属性语法包含下面部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的一个对象。
index	整数或唯一字符串，标识在相关的 ImageList 控件中的 ListImage 对象。整数是 ListImage 对象的 Index 属性的值；字符串是 Key 属性的值。
说明

如果这个属性置为 Null，则使用由 Image 属性指定的缺省图形的屏蔽。


SelectedItem 属性（ActiveX 控件）

返回对所选 ListItem、Node 或 Tab 对象的引用。

语法

object.SelectedItem

object 所在处代表一个对象表达式，其值是“应用于”列表中的一个对象。

说明

SelectedItem 属性返回对于一个对象的引用，该对象能用来在选定的对象上设置属性和调用方法。这一属性被典型地用于返回对 ListItem、Node、Tab 或用户已单击或选定的对象的引用。用此引用，可以在允许任何下一步操作之前验证对象，就象下面的代码中演示的那样：

Command1_Click()

'如果所选对象不是根，则删除此节点。

If TreeView1.SelectedItem.Index <> 1 Then

Treeview1.Nodes.Remove TreeView1.SelectedItem.Index

End If

End Sub

为编程选择 ListItem 对象，用使用带有 SelectedItem 属性的 Set 语句，如下所示：

Set ListView1.SelectedItem = ListView1.ListItems(1)


SelectedItem 属性示例

此例子添加几个 Node 对象到 TreeView 控件。选择 Node 后，单击窗体查看 Node 的各种属性。为试用此例，在窗体上放置 TreeView 控件，并粘贴下面的代码到窗体的声明部分，运行此例，选择 Node，并单击窗体。

Private Sub Form_Load()

Dim nodX As Node

Set nodX = TreeView1.Nodes.Add(, , "r", "Root")

Set nodX = TreeView1.Nodes.Add("r", tvwChild, "c1", "Child 1")

Set nodX = TreeView1.Nodes.Add("r", tvwChild, "c2", "Child 2")

Set nodX = TreeView1.Nodes.Add("r", tvwChild, "c3", "Child 3")

Set nodX = TreeView1.Nodes.Add("c3", tvwChild, "c4", "Child 4")

Set nodX = TreeView1.Nodes.Add("c3", tvwChild, "c5", "Child 5")

Set nodX = TreeView1.Nodes.Add("c5", tvwChild, "c6", "Child 6")

Set nodX = TreeView1.Nodes.Add("c5", tvwChild, "c7", "Child 7")

nodX.EnsureVisible

TreeView1.BorderStyle = vbFixedSingle

End Sub

Private Sub Form_Click()

Dim nodX As Node

'置变量为 SelectedItem。

Set nodX = TreeView1.SelectedItem

Dim strProps As String

'检索节点的各属性。

strProps = "Text: " & nodX.Text & vbLF

strProps = strProps & "Key: " & nodX.Key & vbLF

On Error Resume Next '根节点没有父节点。

strProps = strProps & "Parent: " & nodX.Parent.Text & vbLF

strProps = strProps & "FirstSibling: " & _

nodX.FirstSibling.Text & vbLF

strProps = strProps & "LastSibling: " & _

nodX.LastSibling.Text & vbLF

strProps = strProps & "Next: " & nodX.Next.Text & vbLF

MsgBox strProps

End Sub


Sorted 属性（TreeView 控件）

•	返回或设置一值，此值确定 Node 对象的子节点是否按字母顺序排列。

•	返回或设置一值，此值确定 TreeView 控件的根层节点是否按字母顺序排列。

语法

object.Sorted [ = boolean]

Sorted 属性语法包含下面部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的一个对象。
boolean	布尔表达式，表示 Node 对象是否已被排序如“设置值”中描述。
设置值

boolean 的设置值是：

设置值	描述
True	Node 对象根据它们的 Text 属性按字母顺序排列。其 Text 属性由数字开始的 Node 对象也作为字符串排序，第一个数字确定在排序中的初始位置，后面的数字确定以后的排序。
False	Node 对象不排序。
说明

Sorted 属性有两种用法，第一，在 TreeView 控件的根（顶）层排列 Node 对象，第二，对任何单个 Node 对象的立即子节点排序。例如，下面的代码是对 TreeView 控件的根节点排序：

Private Sub Command1_Click()

TreeView1.Sorted = True	'顶层 Node 对象被排序。

End Sub

下面的例子表示创建 Node 对象时如何设置 Sorted 属性：

Private Sub Form_Load()

Dim nodX As Node

Set nodX = TreeView1.Nodes.Add(,,,"Parent Node")

nodX.Sorted = True

End Sub

设置 Sorted 属性为 True 仅对当前 Nodes 集合排序。在 TreeView 控件中添加新的 Node 对象时，必须再次设置 Sorted 属性为 True，以便对添加的 Node 对象排列。


Sorted 属性（TreeView 控件）示例

此例子在树上添加几个 Node 对象。单击一 Node 时，用户将被询问是否想对 Node 排序。为试用此例，在窗体上放置 TreeView 控件，并粘贴下面的代码到窗体的声明部分，运行此例，单击 Node 对其排序。

Private Sub Form_Load()

'用几个未排序的节点对象创建一树。

Dim nodX As Node

Set nodX = TreeView1.Nodes.Add(, , , "Adam")

Set nodX = TreeView1.Nodes.Add(1, tvwChild, "z", "Zachariah")

Set nodX = TreeView1.Nodes.Add(1, tvwChild, , "Noah")

Set nodX = TreeView1.Nodes.Add(1, tvwChild, , "Abraham")

Set nodX = TreeView1.Nodes.Add("z", tvwChild, , "Stan")

Set nodX = TreeView1.Nodes.Add("z", tvwChild, , "Paul")

Set nodX = TreeView1.Nodes.Add("z", tvwChild, "f", "Frances")

Set nodX = TreeView1.Nodes.Add("f", tvwChild, , "Julie")

Set nodX = TreeView1.Nodes.Add("f", tvwChild, "c", "Carol")

Set nodX = TreeView1.Nodes.Add("f", tvwChild, , "Barry")

Set nodX = TreeView1.Nodes.Add("c", tvwChild, , "Yale")

Set nodX = TreeView1.Nodes.Add("c", tvwChild, , "Harvard")

nodX.EnsureVisible

End Sub

Private Sub TreeView1_NodeClick(ByVal Node As Node)

Dim answer As Integer

'校验是否有子节点。

If Node.Children > 1 Then '有多个子节点。

answer = MsgBox("Sort this node?", vbYesNo)  '提示询问用户。

If answer = vbYes Then	'用户想排序。

Node.Sorted = True

End If

End If

End Sub


Style 属性（TreeView 控件）

返回或设置图形类型（图象、文本、+/- 号、直线）以及出现在 TreeView 控件中每一 Node 对象上的文本的类型。

语法

object.Style [ = number]

Style 语法包含下面部分：

部分	描述
object	对象表达式，其值是“应用于”列表中的一个对象。
number	指定图形类型的整数，请参阅“设置值”中的描述。
设置值

number 的设置值是：

设置值	描述
0	仅为文本。
1	图象和文本。
2	+/- 号和文本。
3	+/- 号，图象和文本。
4	直线和文本。
5	直线，图象和文本。
6	直线，+/- 号和文本。
7	（缺省）直线，+/- 号，图象和文本。
说明

若 Style 属性设置为包含直线的值，则 LineStyle 属性就确定了直线的外观。如果 Style 属性设置为不含直线的值，则 LineStyle 属性将被忽略。


StartLabelEdit 方法

允许用户编辑标签。

语法

object.StartLabelEdit

object 所在处代表一个对象表达式，其值是“应用于”列表中的一个对象。

说明

当 LabelEdit 属性设置为 1（手动）时，必须用 StartLabelEdit 方法来启动一标签编辑操作。

在一对象上调用 StartLabelEdit 方法时，BeforeLabelEdit 事件也同时发生。


StartLabelEdit 方法示例

此例子添加几个 Node 对象到 TreeView 控件中。选定 Node 之后，单击窗体开始编辑它。为试用此例，在窗体上放置 TreeView 控件，并粘贴下面的代码到窗体的声明部分。运行此例，选一 Node 并单击窗体。

Private Sub Form_Load

Dim nodX As Node

Set nodX = TreeView1.Nodes.Add(,,,"Da Vinci") ' Root

Set nodX = TreeView1.Nodes.Add(1,tvwChild,,"Titian")

Set nodX = TreeView1.Nodes.Add(1,tvwChild,,"Rembrandt")

Set nodX = TreeView1.Nodes.Add(1,tvwChild,,"Goya")

Set nodX = TreeView1.Nodes.Add(1,tvwChild,,"David")

nodX.EnsureVisible '展开树，查看全部节点。

End Sub

Private Sub Form_Click()

'如果所选节点不是根节点则允许编辑。

If TreeView1.SelectedItem.Index <> 1 Then

TreeView1.StartLabelEdit

End If

End Sub


Change 事件（占位符）


Click 事件（占位符）


DblClick 事件（占位符）


DragDrop 事件（占位符）


DragOver 事件（占位符）


KeyDown 事件（占位符）


KeyPress 事件（占位符）


KeyUp 事件（占位符）


MouseDown 事件（占位符）


MouseMove 事件（占位符）


MouseUp 事件（占位符）


OLECompleteDrag 事件（占位符）


OLEDragDrop 事件（占位符）


OLEDragOver 事件（占位符）


OLEGiveFeedback 事件（占位符）


OLESetData 事件（占位符）


OLEStartDrag 事件（占位符）


Refresh 方法（占位符）


OLEDrag 方法（占位符）


Appearance 属性（占位符）


BackColor 属性（占位符）


Caption 属性（占位符）


Enabled 属性（占位符）


Font 属性（占位符）


ForeColor 属性（占位符）


IntegralHeight 属性（占位符）


Locked 属性（占位符）


MouseIcon 属性（占位符）


MousePointer 属性（占位符）


OLEDragMode 属性（占位符）


OLEDropMode 属性（占位符）


SelLength 属性（占位符）


SelStart 属性（占位符）


SelText 属性（占位符）


Style 属性（占位符）


Text 属性（占位符）


未找到关键字

不能在 Visual Basic 帮助中找到已选择的关键字。可能是该关键字拼写有误、过多或过少选择文本、或所要寻求帮助的词不是有效的 Visual Basic 关键字。

要获得关于特定关键字的帮助，最简单的方法就是把插入点放到想要获得帮助的关键字内的任何地方，然后按 F1 键。不必选中该关键字。事实上，如果只选中了关键字的一部分，或超过了一个单词，“帮助”将不能找到要查找的内容。

要使用内置的“帮助”查找对话框，请按下工具栏上的“帮助主题”按钮。


Left、Top 属性（占位符）


Height、Width 属性（占位符）


Tag 属性（占位符）


ToolTipText 属性（占位符）


Count 属性（占位符）


Item 方法（占位符）


Hwnd 属性（占位符）


TabStop 属性（占位符）


Visible 属性（占位符）


Picture 属性（占位符）


Max, Min 属性（占位符）


Add 方法（占位符）


Clear 方法（占位符）


Container 属性（占位符）


控件集合（占位符）


Copies 属性（占位符）


DataBinding 对象（占位符）


DataBindings 集合（占位符）


Filename 属性（占位符）


FontBold、FontItalic、FontStrikeThru 属性（占位符）


FontName 属性（占位符）


FontSize 属性（占位符）


GetData 方法（占位符）


GetFormat 方法（占位符）


HelpFile 属性（占位符）


Item 属性（占位符）


Remove 方法（占位符）


SetData 方法（占位符）


Align 属性（占位符）


DragIcon 属性（占位符）


DragMode 属性（占位符）


HelpContextID 属性（占位符）


TabIndex 属性（占位符）


Alignment 常数（占位符）


Border 属性常数（占位符）


BorderStyle 常数（占位符）


BorderStyle 属性（ActiveX 控件）（占位符）


Clear 方法（ActiveX 控件）（占位符）


Clipboard 对象常数（占位符）


Color 常数（占位符）


CommonDialog 控件常数（占位符）


CommonDialog 错误常数（占位符）


Control 常数（占位符）


DataBindings 属性（占位符）


DDE 常数（占位符）


Drag-and-Drop 常数（占位符）


Drawing 常数（占位符）


FetchVerbs 方法（占位符）


Form 常数（占位符）


Graphics 常数（占位符）


Grid 控件常数（占位符）


Help 常数（占位符）


HideSelection 属性（ActiveX 控件）（占位符）


HideSelection 属性（占位符）


Image 属性（ActiveX 控件）（占位符）


ImageList 属性（ActiveX 控件）（占位符）


Index 属性（ActiveX 控件）（占位符）


Index 属性（占位符）


Key Code 常数（占位符）


Key 属性（ActiveX 控件）（占位符）


Menu Accelerator 常数（占位符）


Menu Control 常数（占位符）


Miscellaneous 常数（占位符）


MousePointer 常数（占位符）


OLE Container Control 常数（占位符）


Picture Object 常数（占位符）


Printer Object 常数（占位符）


RasterOp 常数（占位符）


Remove 方法（ActiveX 控件）（占位符）


ShowInTaskbar 属性（占位符）


ShowTips 属性（ActiveX 控件）（占位符）


ShowWhatsThis 方法（占位符）


Text 属性（ActiveX 控件）（占位符）


Value 属性（ActiveX 控件）（占位符）


Variant Type 常数（占位符）


Visual Basic 常数（占位符）


WhatsThisButton 属性（占位符）


WhatsThisHelp 属性（占位符）


WhatsThisHelpID 属性（占位符）


WhatsThisMode 方法（占位符）


Windows 95 控件常数（占位符）


ColIsVisible 属性（占位符）


ColPos 属性（占位符）


DataObject 对象（占位符）


DataObjectFiles 集合（占位符）


DataSource 属性（占位符）


Drag 方法（占位符）


DrawMode 属性（占位符）


FixedAlignment 属性（占位符）


GotFocus 事件（占位符）


GridLineWidth 属性（占位符）


Index 属性（控件数组）（占位符）


LostFocus 事件（占位符）


Move 方法（占位符）


Name 属性（占位符）


Object 属性（占位符）


Parent 属性（占位符）


RowColChange 事件（占位符）


RowIsVisible 属性（占位符）


RowPos 属性（占位符）


SetFocus 方法（占位符）


ZOrder 方法（占位符）


Files 方法（占位符）


Connect 事件（占位符）


HScrollSmallChange、VScrollSmallChange 属性（占位符）


MinHeight、MinWidth 属性（占位符）


“属性页”对话框（占位符）


RemoteHost 属性（占位符）


RemotePort 属性（占位符）


ViewportHeight、ViewportLeft、ViewportTop、ViewportWidth 属性（占位符）


Resync 方法（远程数据）（占位符）


ContainedVBControls 集合（占位符）


Member 对象（占位符）


Members 集合（占位符）


VBComponentsEvents 对象（占位符）


VBProjectsEvents 对象（占位符）


Files 属性（占位符）


Alignment 属性（占位符）


AboutBox 方法（占位符）


Col, Row 属性（占位符）


RowHeight 属性（占位符）


Scroll 事件（占位符）


ScrollBars 属性（占位符）


SelEndCol, SelStartCol, SelEndRow, SelStartRow 属性（占位符）


Appearance 属性 (ActiveX 控件) (placeholder)


BackColor, ForeColor 属性 (ActiveX 控件) (placeholder)


BorderStyle 常数 (ActiveX 控件) (placeholder)


Caption 属性 (ActiveX 控件) (placeholder)


Change 事件 (ActiveX 控件) (placeholder)


Clear 方法 (ActiveX 控件) (placeholder)


Click 事件 (ActiveX 控件) (placeholder)


Clipboard Object 常数 (ActiveX 控件) (placeholder)


Count 属性 (ActiveX 控件) (placeholder)


DataObject Object (ActiveX 控件) (placeholder)


DataObjectFiles 集合 (ActiveX 控件) (placeholder)


DataSource 属性 (ActiveX 控件) (placeholder)


DblClick 事件 (ActiveX 控件) (placeholder)


Drag-and-Drop 常数 (ActiveX 控件) (placeholder)


Enabled 属性 (ActiveX 控件) (placeholder)


FetchVerbs 方法 (ActiveX 控件) (placeholder)


Files 方法 (ActiveX 控件) (placeholder)


Font 属性 (ActiveX 控件) (placeholder)


FontName 属性 (ActiveX 控件) (placeholder)


FontSize 属性 (ActiveX placeholder)


GetData 方法 (ActiveX 控件) (placeholder)


GetFormat 方法 (ActiveX 控件) (placeholder)


HideSelection 属性 (ActiveX 控件) (complaceholder)


hWnd 属性 (ActiveX 控件) (placeholder)


Item 方法 (ActiveX 控件) (placeholder)


Key Code 常数 (ActiveX 控件) (placeholder)


Key 属性 (ActiveX 控件) (complaceholder)


KeyDown, KeyUp 事件 (ActiveX 控件) (placeholder)


KeyPress 事件 (ActiveX 控件) (placeholder)


Max, Min 属性 (ActiveX 控件) (placeholder)


MouseDown, MouseUp 事件 (ActiveX 控件) (placeholder)


MouseIcon 属性 (ActiveX 控件) (placeholder)


MouseMove 事件 (ActiveX 控件) (placeholder)


MousePointer 常数 (ActiveX 控件) (placeholder)


MousePointer 属性 (ActiveX 控件) (placeholder)


OLECompleteDrag 事件 (ActiveX 控件) (placeholder)


OLEDrag 方法 (ActiveX 控件) (placeholder)


OLEDragDrop 事件 (ActiveX 控件) (placeholder)


OLEDragMode 属性 (ActiveX 控件) (placeholder)


OLEDragOver 事件 (ActiveX 控件) (placeholder)


OLEDropMode 属性 (ActiveX 控件) (placeholder)


OLEGiveFeedback 事件 (ActiveX 控件) (placeholder)


OLESetData 事件 (ActiveX 控件) (placeholder)


OLEStartDrag 事件 (ActiveX 控件) (placeholder)


Picture 属性 (ActiveX 控件) (placeholder)


属性页对话框 (ActiveX 控件) (placeholder)


RemoteHost 属性 (ActiveX 控件) (placeholder)


RemotePort 属性 (ActiveX 控件) (placeholder)


SelLength, SelStart, SelText 属性 (ActiveX 控件) (placeholder)


SetData 方法 (ActiveX 控件) (placeholder)


ShowTips 属性 (ActiveX 控件) (complaceholder)


Text 属性 (ActiveX 控件) (complaceholder)


Value 属性 (ActiveX 控件) (complaceholder)


hDC 属性 (ActiveX 控件) (complaceholder)


Height, Width 属性 (ActiveX 控件) (complaceholder)


Index 属性 (ActiveX 控件) (complaceholder)


Left, Top 属性 (ActiveX 控件) (complaceholder)


Tag 属性 (ActiveX 控件) (complaceholder)


Visible 属性 (ActiveX 控件) (complaceholder)


Remove 方法 (ActiveX 控件) (complaceholder)


Object 属性 (ActiveX 控件) (placeholder)


属性页 (ActiveX 控件) (placeholder)


字体不存在 (错误 24574) (公用对话框控件) (complaceholder)


帮助内容placeholder


BorderStyle 属性 (ActiveX 控件) (placeholder)


RightToLeft 属性 (ActiveX 控件) (placeholder)


Refresh 方法 (ActiveX 控件) (placeholder)