ComboBox 类
ComboBox是一个Win32原生控件,将编辑字段与下拉列表组合在一起,允许用户键入值或从列表中选择。该控件通常在设计时放置在Form或UserControl上。默认属性是Text,默认事件是Change。
Private Sub Form_Load()
With Combo1
.AddItem "Apple"
.AddItem "Banana"
.AddItem "Cherry"
.ListIndex = 0
End With
End Sub
Private Sub Combo1_Click()
Debug.Print "Picked: " & Combo1.Text
End Sub样式
Style选择三种Win32组合框变体之一(ComboBoxConstants):
| 常量 | 值 | 布局 |
|---|---|---|
| vbComboDropdown | 0 | 可编辑文本+下拉按钮+下拉列表。默认值。 |
| vbComboSimple | 1 | 可编辑文本+永久可见列表(无下拉按钮)。 |
| vbComboDropdownList | 2 | 仅下拉列表——用户必须选择一个值;禁止键入。 |
在运行时更改Style会重新创建底层窗口(现有列表内容和选择被保留)。Sorted和IntegralHeight以相同方式重新创建窗口。
编辑列表
条目保存在操作系统组合框控件内部;List和ItemData数组是对该存储的映射。条目通过AddItem添加,通过RemoveItem移除,整个列表通过Clear清空。每次AddItem调用后,NewIndex报告条目插入的位置——当Sorted为True且位置无法从调用预测时非常有用。
Combo1.Sorted = True
Combo1.AddItem "Cherry"
Combo1.AddItem "Apple" ' 插入到索引0 — Combo1.NewIndex = 0
Combo1.ItemData(Combo1.NewIndex) = 42选择和文本
ListIndex是选中条目的索引,无选中时为-1。从代码设置它会高亮对应条目并引发Click(仅当值实际更改时)。TopIndex控制下拉部分打开时哪个条目出现在顶部。
Text读取或写入可编辑区域,但在vbComboDropdownList模式下没有编辑字段——此时赋值字符串会以不区分大小写的精确匹配搜索列表,找到则选中该条目,否则不做任何操作。任何模式下读取Text都返回当前显示文本。
对于有编辑区域的样式(vbComboDropdown和vbComboSimple),SelStart、SelLength和SelText反映或修改用户的文本选择。在vbComboDropdownList模式下读写这些属性会引发运行时错误380。
OLE拖放
OLEDragMode控制源端拖动(仅对有编辑区域的样式有意义——当设置为vbOLEDragAutomatic时,在编辑区域拖动选中文本会以该文本为数据启动OLE拖动)。OLEDropMode控制放置目标行为,仅限于vbOLEDropNone或vbOLEDropManual。
属性
Appearance
确定操作系统如何绘制控件的边框。AppearanceConstants的成员:vbAppearFlat或vbAppear3d(默认)。
BackColor
编辑区域和列表背景的颜色,类型为OLE_COLOR。默认为系统窗口背景色。
BorderStyle
ControlBorderStyleConstants的成员:vbNoBorder (0)或vbFixedSingleBorder (1,默认)。在运行时更改会重新同步边框而不重新创建窗口。
CausesValidation
确定先前获得焦点的控件的Validate事件是否在此控件获得焦点之前运行。Boolean,默认True。
ControlType
只读的ControlTypeConstants值,将此控件标识为组合框。始终为vbComboBox。
DragIcon
控件被拖放时用作鼠标光标的StdPicture(参见Drag和DragMode)。
DragMode
控件是否应在用户按住鼠标时自动拖动。DragModeConstants的成员:vbManual (0,默认——从代码调用Drag)或vbAutomatic (1)。
Enabled
确定控件是否接受用户输入。禁用的组合框显示当前文本但变暗并忽略键盘和鼠标交互。Boolean,默认True。
Font
用于渲染编辑区域和下拉列表中文本的StdFont。便捷属性FontName、FontSize、FontBold、FontItalic、FontStrikethru和FontUnderline读写此对象的相应成员。当IntegralHeight为True时,更改字体可能会垂直调整控件大小。
ForeColor
文本颜色,类型为OLE_COLOR。默认为系统窗口文本色。
Height
控件的高度,默认以缇为单位(或使用容器的ScaleMode单位)。对于vbComboDropdown和vbComboDropdownList,这是关闭状态的控件高度(下拉部分的大小单独控制——参见MaxDropDownItems)。对于vbComboSimple,这是包括始终可见列表在内的总高度。Single。
HelpContextID
标识应用程序帮助文件中主题的Long值,当用户在控件具有焦点时按F1时检索。
hWnd
底层组合框的Win32窗口句柄,类型为LongPtr。只读。可用于传递给API函数。
Index
当控件是控件数组的一部分时,此实例在数组中的从零开始的Long索引。运行时只读。
IntegralHeight
当为True(默认)时,操作系统调整控件高度使列表可见部分显示完整条目而非部分条目。当为False时,控件精确遵循Height。Boolean。在运行时更改此属性会重新创建底层窗口。
ItemData
应用程序可关联到每个条目的LongPtr。使用与List相同的从零开始的位置索引。
语法:object.ItemData( Index ) [ = value ]
- Index
- 必需 从零开始的Long条目位置。
Combo1.AddItem "Apple"
Combo1.ItemData(Combo1.NewIndex) = customerIDLeft
从容器的左边缘到控件左边缘的水平距离。Single。
List
条目的文本,按从零开始的位置索引。设置List(Index)会移除该位置的现有条目并在同一索引重新插入新值——注意当Sorted为True时这可能改变最终位置。
语法:object.List( Index ) [ = string ]
ListCount
列表中的条目数,类型为Long。只读。
ListIndex
选中条目的从零开始的索引,无选中时为-1。Long。赋值与当前值不同的值会选中该条目并引发Click。
Locked
当为True时,用户可以在控件中滚动和选择,但不能在编辑区域键入或用键盘或鼠标滚轮更改选择。Boolean,默认False。当Style为vbComboDropdownList时无效(没有可锁定的编辑区域)。
MaxDropDownItems
用户打开下拉部分时显示的最大条目数。Long,默认0——为零时由操作系统选择高度(通常为8个条目)。
MouseIcon
当MousePointer为vbCustom且指针位于控件上时用作鼠标光标的StdPicture。
MousePointer
指针位于控件上时显示的鼠标光标。MousePointerConstants的成员。
Name
控件在其父窗体上的唯一设计时名称。运行时只读。
NewIndex
最近一次AddItem调用插入条目的从零开始的索引,如果自控件创建以来未添加条目则为-1。当Sorted为True且最终位置无法从调用预测时特别有用。Long,只读。
OLEDragMode
控件的编辑区域是否可作为自动OLE拖动源。OLEDragConstants的成员:vbOLEDragManual (0,默认——从代码调用OLEDrag)或vbOLEDragAutomatic (1——在编辑区域拖动选中文本会以该文本为数据启动OLE拖动,且放置效果vbDropEffectMove会清除选择)。
OLEDropMode
控件如何响应OLE放置。OLEDropConstants的受限成员:vbOLEDropNone或vbOLEDropManual。ComboBox不支持自动放置模式。
Opacity
控件的不透明度百分比(0--100,默认100)。超出范围的值在Initialize时被钳制。子控件需要Windows 8或更高版本。
Parent
对包含此控件的Form(或UserControl)的引用。只读。
RightToLeft
INFO
保留用于与VB6兼容;目前在twinBASIC中未实现。
SelLength
编辑区域中选中的字符数。Long。当Style为vbComboDropdownList时读写此属性会引发运行时错误380。
SelStart
编辑区域中第一个选中字符的从零开始的位置,或无文本选中时的插入点位置。Long。当Style为vbComboDropdownList时读写此属性会引发运行时错误380。
SelText
编辑区域中当前选中的文本。赋值字符串会用该字符串替换选择并将插入点定位在插入文本之后。String。当Style为vbComboDropdownList时读写此属性会引发运行时错误380。
Sorted
当为True时,通过AddItem添加的条目按字母顺序插入,不考虑Index参数;当为False(默认)时,条目插入到请求的位置(或追加到末尾)。Boolean。在运行时更改此属性会重新创建底层窗口并重新添加现有条目。
Style
选择三种组合框变体之一。ComboBoxConstants的成员:vbComboDropdown (0,默认)、vbComboSimple (1)或vbComboDropdownList (2)。参见上方的样式部分了解布局差异。在运行时更改Style会重新创建底层窗口。
TabIndex
控件在窗体TAB键导航顺序中的位置。Long。
TabStop
用户是否可以通过按TAB键到达控件。Boolean,默认True。禁用的控件无论此设置如何都会被跳过。
Tag
应用程序可用于将自定义数据与控件关联的自由格式String。框架忽略此属性。
Text
编辑区域中显示的文本,或当Style为vbComboDropdownList时选中条目的文本。默认属性。
语法:object.Text [ = string ]
对于vbComboDropdown和vbComboSimple,赋值会直接写入编辑区域,如果新值与当前值不同则引发Change。对于vbComboDropdownList,赋值会搜索列表(不区分大小写,精确匹配),如果找到匹配项则选中;如果无匹配项,赋值无可见效果。
ToolTipText
当用户将鼠标悬停在控件上时作为工具提示显示的多行String。
Top
从容器顶部到控件顶部的垂直距离。Single。
TopIndex
下拉(或始终可见)列表顶部显示条目的从零开始的索引。赋值会滚动列表使该条目位于顶部。Long。
TransparencyKey
一个OLE_COLOR值,设置后在渲染的控件中变为完全透明。默认-1禁用此效果。子控件需要Windows 8或更高版本。
Visible
控件是否显示。Boolean,默认True。
VisualStyles
绘制控件时是否使用操作系统主题引擎。Boolean,默认True。
WhatsThisHelpID
标识应用程序帮助文件中"这是什么?"弹出帮助主题的Long值。参见ShowWhatsThis。
WheelScrollEvent
当为True(默认)时,下拉列表上的鼠标滚轮通知引发Scroll事件;当为False时,滚轮仍会滚动列表但Scroll被抑制。Boolean。VB6从不为滚轮事件引发Scroll;将此设置为False可完全匹配该行为。
Width
控件的宽度。Single。
方法
AddItem
向列表插入新条目并将结果位置存储在NewIndex中。
语法:object.AddItem Value [, Index ]
- Value
- 必需 新条目文本的String。
- Index
- 可选 要插入的从零开始的Long位置。省略则追加到末尾。当Sorted为True时忽略。
Clear
移除列表中的所有条目并清除ListIndex。
语法:object.Clear
Drag
开始、完成或取消手动拖放操作。
语法:object.Drag [ Action ]
- Action
- 可选 DragConstants的成员:vbCancel (0)、vbBeginDrag (1,默认)或vbEndDrag (2)。
Move
在单次调用中重新定位并可选地调整控件大小。
语法:object.Move Left [, Top [, Width [, Height ] ] ]
- Left
- 必需 给出新水平位置的Single值。
- Top、Width、Height
- 可选 对应属性的新值。省略的值保持不变。
OLEDrag
从控件发起OLE拖动操作,引发OLEStartDrag事件以便应用程序填充DataObject。
语法:object.OLEDrag
Refresh
强制控件立即重绘。
语法:object.Refresh
RemoveItem
移除给定从零开始位置处的条目。其下方的条目上移一位。
语法:object.RemoveItem Index
- Index
- 必需 从零开始的Long位置。
SetFocus
将输入焦点移至控件。控件必须同时Visible和Enabled,否则引发运行时错误5(Invalid procedure call or argument)。
语法:object.SetFocus
ShowWhatsThis
以"这是什么?"弹出的方式显示由WhatsThisHelpID标识的主题。
语法:object.ShowWhatsThis
ZOrder
将控件置于其同级堆栈的前面或后面。
语法:object.ZOrder [ Position ]
- Position
- 可选 ZOrderConstants的成员:vbBringToFront (0,默认)或vbSendToBack (1)。
事件
Change
编辑区域文本更改时引发——无论用户在其中键入还是代码赋值了不同的Text值。在vbComboDropdownList模式下不引发(没有编辑区域)。默认事件。
语法:object_Change( )
Click
ListIndex更改后引发——无论用户从列表中选择了条目还是代码赋值了不同的ListIndex值。再次赋值当前值不会引发Click。
语法:object_Click( )
CloseUp
下拉部分关闭时引发——因为用户选择了条目、点击了其他地方或按了Esc。在vbComboSimple模式下不引发(列表始终可见)。
语法:object_CloseUp( )
DblClick
用户双击始终可见列表中的条目时引发(vbComboSimple模式)。
语法:object_DblClick( )
DragDrop
手动拖动操作在目标控件上结束时在目标控件上引发。
语法:object_DragDrop( Source As Control, X As Single, Y As Single )
DragOver
手动拖动操作进行中时在光标下方的控件上引发。
语法:object_DragOver( Source As Control, X As Single, Y As Single, State As Integer )
DropDown
用户打开下拉部分时引发。在vbComboSimple模式下不引发(列表始终可见)。
语法:object_DropDown( )
GotFocus
控件获得输入焦点时引发。
语法:object_GotFocus( )
KeyDown
用户在控件具有焦点时按下任意键引发。
语法:object_KeyDown( KeyCode As Integer, Shift As Integer )
KeyPress
用户键入产生ANSI击键的字符时引发。
语法:object_KeyPress( KeyAscii As Integer )
KeyUp
用户在控件具有焦点时释放键引发。
语法:object_KeyUp( KeyCode As Integer, Shift As Integer )
LostFocus
控件失去输入焦点时引发。
语法:object_LostFocus( )
OLECompleteDrag
OLE拖动操作完成时在源控件上引发,指示目标接受了哪种效果(复制、移动、无)。
语法:object_OLECompleteDrag( Effect As Long )
OLEDragDrop
用户将数据放置到目标控件上时在目标控件上引发。
语法:object_OLEDragDrop( Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single )
OLEDragOver
OLE拖动经过目标控件时在目标控件上引发。
语法:object_OLEDragOver( Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single, State As Integer )
OLEGiveFeedback
拖动期间在源控件上引发,以便应用程序调整光标或其他视觉反馈。
语法:object_OLEGiveFeedback( Effect As Long, DefaultCursors As Boolean )
OLESetData
当目标请求已注册但尚未提供的数据格式时在源控件上引发。
语法:object_OLESetData( Data As DataObject, DataFormat As Integer )
OLEStartDrag
OLE拖动开始时在源控件上引发,以便应用程序填充DataObject并选择允许的效果。
语法:object_OLEStartDrag( Data As DataObject, AllowedEffects As Long )
Scroll
下拉(或始终可见)列表滚动时引发——通过滚动条、键盘或鼠标滚轮。通过将WheelScrollEvent设置为False可抑制滚轮驱动的滚动事件。
语法:object_Scroll( )
Validate
焦点移动到另一个CausesValidation为True的控件时引发。将Cancel设置为True可使焦点保留在此控件上。
语法:object_Validate( Cancel As Boolean )