Frame 类
Frame是Win32原生容器控件,在一组带标题的边框内将一组相关控件分组。它有两个不同的用途——视觉上提示包含的控件属于同一组,以及为OptionButton控件提供逻辑分组:同一框架内的选项按钮互斥,但与窗体上其他位置的选项按钮独立。在设计时拖放到框架上的控件成为其子级,移动、隐藏、禁用或销毁框架会随之移动、隐藏、禁用或销毁整个组。
框架本身不能接收输入焦点。其Caption中的助记标记(&)有效,但按**Alt+**该字符会将焦点移到TAB顺序中的下一个控件而非框架本身——与Label完全相同。
Private Sub Form_Load()
fraOutput.Caption = "&Output format"
optHTML.Caption = "&HTML"
optMarkdown.Caption = "&Markdown"
optPlain.Caption = "&Plain text"
optHTML.Value = True ' default selection within fraOutput
End Sub
Private Sub fraOutput_Click()
Debug.Print "Frame clicked (between the option buttons)"
End Sub容器行为
框架是真正的容器:其中每个控件的Win32父级是框架的hWnd,其坐标相对于框架的客户区而非窗体。因此:
- 切换Visible或Enabled会影响每个包含的控件。
- 调用Move重新定位框架,子控件随其移动而不会各自引发调整大小。
- 框架的Anchors和Dock设置使其随父级拉伸,因此整个组一起调整大小。
- 控件的Container属性返回其所在的框架(框架自身的Container返回承载它的窗体或其他框架)。
标题、助记符和边框
Caption中的文本由标准Win32分组框样式沿边框的顶部边缘渲染。标题中的和号将下一个字符标记为键盘助记符;使用&&显示字面和号。按**Alt+**标记字符将焦点移到TAB顺序中的下一个控件——框架本身不获取焦点。
BorderStyle选择标准带标题单线边框(vbFixedSingleBorder,默认)和无边框模式(vbNoBorder)。在vbNoBorder模式下,标准分组框渲染被完全绕过——既不绘制线条也不绘制标题文本——框架成为纯矩形区域。Appearance进一步选择标准边框的3-D和平面变体。
OptionButton 分组
每个框架定义自己的选项按钮组。当用户选择父级为此框架的OptionButton时,同一框架上的所有其他选项按钮会自动清除,但窗体上(或同级框架中)的选项按钮不受影响。使用框架在同一窗体上呈现多个独立的单选式选择:
' Two independent option-button groups on one form:
' fraSize: optSmall, optMedium, optLarge
' fraColour: optRed, optGreen, optBlue透明度和不透明度
Opacity和TransparencyKey启用了Windows的分层窗口功能。将Opacity设置为100以下会使框架及其包含的控件半透明;将TransparencyKey设置为某种颜色会使该颜色的像素在屏幕上完全透明。这两个功能在框架包含子控件时需要Windows 8或更高版本——否则仅影响框架自身的背景。
属性
Anchors
决定框架的哪些边随父级对应边调整的边集合。只读——通过返回的Anchors对象设置各个.Left、.Top、.Right、.Bottom标志。
Appearance
决定操作系统绘制框架边框的方式。AppearanceConstants的成员:vbAppearFlat或vbAppear3d(默认)。
BackColor
框架客户区的背景色,作为OLE_COLOR。默认为系统3D表面颜色。绘制在包含控件的后面。
BorderStyle
框架边框的样式。ControlBorderStyleConstants的成员:vbFixedSingleBorder(1,默认——带标题的分组框线条)或vbNoBorder(0)。使用vbNoBorder时标题也被抑制,框架成为无边框背景面板。
Caption
沿框架边框顶部边缘渲染的文本。String。默认属性。
语法:object.Caption [ = string ]
和号将下一个字符标记为助记符;&&产生字面和号。字符串直接从底层窗口读取——赋值给Caption会立即更新渲染。
ClipControls
在绘制期间子控件是否被裁剪出框架的绘制区域。Boolean,默认True。在运行时更改ClipControls会重新创建底层窗口。
Container
承载此框架的控件——通常是窗体或其他框架。用Get读取,用Set更改。设置Container在运行时将框架重新设置为其他容器的子级。
ControlType
标识此控件为框架的只读ControlTypeConstants值。始终为vbFrame。
Dock
框架在其容器中的停靠位置。DockModeConstants的成员:vbDockNone(默认)、vbDockLeft、vbDockTop、vbDockRight、vbDockBottom或vbDockFill。停靠的框架忽略Anchors。
DragIcon
在框架被拖放时用作鼠标光标的StdPicture(参见Drag和DragMode)。
DragMode
框架是否应在用户按住鼠标时自行拖动。DragModeConstants的成员:vbManual(0,默认——从代码调用Drag)或vbAutomatic(1)。
Enabled
决定框架及其包含的控件是否接受用户输入。禁用的框架会使内容变暗,忽略鼠标和键盘交互。Boolean,默认True。更改Enabled会触发立即重绘以使边框反映新状态。
Font
用于渲染Caption的StdFont。便捷属性FontBold、FontItalic、FontName、FontSize、FontStrikethru和FontUnderline读写此对象的对应成员。
FontBold
Font.Bold的快捷方式。Boolean。
FontItalic
Font.Italic的快捷方式。Boolean。
FontName
Font.Name的快捷方式。String。
FontSize
Font.Size的快捷方式。Single,以磅为单位。
FontStrikethru
Font.Strikethrough的快捷方式。Boolean。
FontUnderline
Font.Underline的快捷方式。Boolean。
ForeColor
用于绘制Caption的颜色,作为OLE_COLOR。默认为系统按钮文本颜色。
Height
框架的高度,默认以缇为单位(或以容器的ScaleMode单位)。Double。
HelpContextID
标识应用程序帮助文件中主题的Long,当用户在框架下方有活动控件时调用上下文帮助时检索。
hWnd
框架的Win32窗口句柄,作为LongPtr。只读。适用于传递给API函数。
Index
当框架是控件数组的一部分时,此实例在数组中的Long零基索引。在非数组实例上读取Index会引发运行时错误343(对象不是数组)。运行时只读。
Left
从容器左边缘到框架左边缘的水平距离。Double。
MouseIcon
当MousePointer为vbCustom且指针在框架上方时用作鼠标光标的StdPicture。
MousePointer
指针在框架上方(且不在有自身设置的子控件上方)时显示的鼠标光标。MousePointerConstants的成员。
MultiFramePosition
当框架承载在MultiFrame布局容器内时,此框架在MultiFrame有序序列中的Long零基位置。默认-1(未分配位置)。在MultiFrame外部该值被忽略。
MultiFrameSize
当框架承载在MultiFrame内时,其尺寸作为MultiFrame可用范围的百分比(0表示"均匀共享")。Double。在MultiFrame外部该值被忽略。
Name
框架在其父窗体上的唯一设计时名称。运行时只读。
OLEDropMode
框架如何响应OLE放置。OLEDropConstants的受限成员:vbOLEDropNone或vbOLEDropManual。Frame不支持自动放置模式;赋值vbOLEDropAutomatic会引发运行时错误5。
Opacity
框架的不透明度百分比(0--100,默认100)。超出范围的值在Initialize时被钳制。低于100的值在框架有子控件时需要Windows 8或更高版本;进程外子窗口不受影响。
OriginalMultiFramePosition
MultiFrame上次重排时框架的MultiFramePosition。Long,默认-1。由MultiFrame布局引擎在框架移动后用于压缩位置;通常不从用户代码写入。
Parent
对最终包含框架的Form(或UserControl)的引用。只读。与Container不同,后者返回直接父级(窗体或封闭框架)。
RightToLeft
INFO
保留用于与VB6兼容;目前在twinBASIC中尚未实现。
TabIndex
框架在窗体TAB键导航顺序中的位置。Long。框架本身不接收焦点,但TabIndex控制框架的助记符将焦点转发到哪里:Alt+标记字符移到TabIndex大于此值的下一个可聚焦控件。
Tag
应用程序可用于将自定义数据与框架关联的自由格式String。框架忽略此属性。
ToolTipText
用户悬停在框架边框或背景上方时作为工具提示显示的多行String。
Top
从容器顶部到框架顶部的垂直距离。Double。
TransparencyKey
设置后成为渲染框架中完全透明的OLE_COLOR——点击穿过到下面内容,相应像素不绘制。默认-1禁用效果。框架有子控件时需要Windows 8或更高版本。
Visible
框架及其包含的控件是否显示。Boolean,默认True。
VisualStyles
绘制框架边框和标题时是否使用操作系统主题引擎。Boolean,默认True。
WhatsThisHelpID
INFO
保留用于与VB6兼容;目前在twinBASIC中尚未实现。参见ShowWhatsThis。
Width
框架的宽度。Double。
方法
Drag
开始、完成或取消手动拖放操作。通常在DragMode为vbManual时从MouseDown处理程序调用。
语法: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
SetFocus
尝试将输入焦点移到框架。由于框架不可聚焦,此调用对哪个控件持有焦点没有可见效果,但提供它是为了与控件API其余部分保持一致,以及与通用调用SetFocus的代码兼容。
语法:object.SetFocus
ShowWhatsThis
INFO
保留用于与VB6兼容;目前在twinBASIC中尚未实现。
语法:object.ShowWhatsThis
ZOrder
将框架带到容器内同级堆栈的前面或后面。
语法:object.ZOrder [ Position ]
- Position
- 可选 ZOrderConstants的成员:vbBringToFront(0,默认)或vbSendToBack(1)。
事件
Click
当用户单击框架的客户区或边框(即不在任何包含的控件上方)时引发。默认事件。
语法:object_Click( )
DblClick
当用户双击框架的客户区或边框时引发。
语法: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 )
Initialize
在框架的底层窗口已创建但尚未填充任何包含的控件后引发一次。适用于设置框架子级在其自身初始化时将读取的初始值。
语法:object_Initialize( )
MouseDown
当用户在框架的客户区或边框上方按下任意鼠标按钮时引发。
语法:object_MouseDown( Button As Integer, Shift As Integer, X As Single, Y As Single )
MouseMove
当光标在框架的客户区或边框上方移动时引发。
语法:object_MouseMove( Button As Integer, Shift As Integer, X As Single, Y As Single )
MouseUp
当用户在框架的客户区或边框上方释放鼠标按钮时引发。
语法:object_MouseUp( Button As Integer, Shift As Integer, X As Single, Y As Single )
MouseWheel
当鼠标滚轮在框架上方转动时引发。twinBASIC新增。
语法:object_MouseWheel( Delta As Integer, Horizontal As Boolean )
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 )