Skip to content

Frame 类

Frame是Win32原生容器控件,在一组带标题的边框内将一组相关控件分组。它有两个不同的用途——视觉上提示包含的控件属于同一组,以及为OptionButton控件提供逻辑分组:同一框架内的选项按钮互斥,但与窗体上其他位置的选项按钮独立。在设计时拖放到框架上的控件成为其子级,移动、隐藏、禁用或销毁框架会随之移动、隐藏、禁用或销毁整个组。

框架本身不能接收输入焦点。其Caption中的助记标记(&)有效,但按**Alt+**该字符会将焦点移到TAB顺序中的下一个控件而非框架本身——与Label完全相同。

默认属性是Caption,默认事件是Click

vb
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,其坐标相对于框架的客户区而非窗体。因此:

  • 切换VisibleEnabled会影响每个包含的控件。
  • 调用Move重新定位框架,子控件随其移动而不会各自引发调整大小。
  • 框架的AnchorsDock设置使其随父级拉伸,因此整个组一起调整大小。
  • 控件的Container属性返回其所在的框架(框架自身的Container返回承载它的窗体或其他框架)。

标题、助记符和边框

Caption中的文本由标准Win32分组框样式沿边框的顶部边缘渲染。标题中的和号将下一个字符标记为键盘助记符;使用&&显示字面和号。按**Alt+**标记字符将焦点移到TAB顺序中的下一个控件——框架本身不获取焦点。

BorderStyle选择标准带标题单线边框(vbFixedSingleBorder,默认)和无边框模式(vbNoBorder)。在vbNoBorder模式下,标准分组框渲染被完全绕过——既不绘制线条也不绘制标题文本——框架成为纯矩形区域。Appearance进一步选择标准边框的3-D和平面变体。

OptionButton 分组

每个框架定义自己的选项按钮组。当用户选择父级为此框架的OptionButton时,同一框架上的所有其他选项按钮会自动清除,但窗体上(或同级框架中)的选项按钮不受影响。使用框架在同一窗体上呈现多个独立的单选式选择:

vb
' Two independent option-button groups on one form:
'   fraSize:    optSmall, optMedium, optLarge
'   fraColour:  optRed, optGreen, optBlue

透明度和不透明度

OpacityTransparencyKey启用了Windows的分层窗口功能。将Opacity设置为100以下会使框架及其包含的控件半透明;将TransparencyKey设置为某种颜色会使该颜色的像素在屏幕上完全透明。这两个功能在框架包含子控件时需要Windows 8或更高版本——否则仅影响框架自身的背景。

属性

Anchors

决定框架的哪些边随父级对应边调整的边集合。只读——通过返回的Anchors对象设置各个.Left.Top.Right.Bottom标志。

Appearance

决定操作系统绘制框架边框的方式。AppearanceConstants的成员:vbAppearFlatvbAppear3d(默认)。

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(默认)、vbDockLeftvbDockTopvbDockRightvbDockBottomvbDockFill。停靠的框架忽略Anchors

DragIcon

在框架被拖放时用作鼠标光标的StdPicture(参见DragDragMode)。

DragMode

框架是否应在用户按住鼠标时自行拖动。DragModeConstants的成员:vbManual(0,默认——从代码调用Drag)或vbAutomatic(1)。

Enabled

决定框架及其包含的控件是否接受用户输入。禁用的框架会使内容变暗,忽略鼠标和键盘交互。Boolean,默认True。更改Enabled会触发立即重绘以使边框反映新状态。

Font

用于渲染CaptionStdFont。便捷属性FontBoldFontItalicFontNameFontSizeFontStrikethruFontUnderline读写此对象的对应成员。

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

MousePointervbCustom且指针在框架上方时用作鼠标光标的StdPicture

MousePointer

指针在框架上方(且不在有自身设置的子控件上方)时显示的鼠标光标。MousePointerConstants的成员。

MultiFramePosition

当框架承载在MultiFrame布局容器内时,此框架在MultiFrame有序序列中的Long零基位置。默认-1(未分配位置)。在MultiFrame外部该值被忽略。

MultiFrameSize

当框架承载在MultiFrame内时,其尺寸作为MultiFrame可用范围的百分比(0表示"均匀共享")。Double。在MultiFrame外部该值被忽略。

Name

框架在其父窗体上的唯一设计时名称。运行时只读。

OLEDropMode

框架如何响应OLE放置。OLEDropConstants的受限成员:vbOLEDropNonevbOLEDropManual。Frame不支持自动放置模式;赋值vbOLEDropAutomatic会引发运行时错误5。

Opacity

框架的不透明度百分比(0--100,默认100)。超出范围的值在Initialize时被钳制。低于100的值在框架有子控件时需要Windows 8或更高版本;进程外子窗口不受影响。

OriginalMultiFramePosition

MultiFrame上次重排时框架的MultiFramePositionLong,默认-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

开始、完成或取消手动拖放操作。通常在DragModevbManual时从MouseDown处理程序调用。

语法:object.Drag [ Action ]

Action
可选 DragConstants的成员:vbCancel(0)、vbBeginDrag(1,默认)或vbEndDrag(2)。

Move

在单次调用中重新定位并可选地调整框架的尺寸。包含的控件随其重新定位。

语法:object.Move Left [, Top [, Width [, Height ] ] ]

Left
必需 给出新水平位置的Single
TopWidthHeight
可选 对应属性的新值。省略的值保持不变。

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 )

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