MultiFrame 类
MultiFrame是一个布局容器,将一组Frame控件排列在单条水平或垂直带中,并在MultiFrame自身调整大小时调整它们的尺寸。每个包含的框架保留自己的边框、标题和子控件;MultiFrame仅决定每个框架的位置和宽度(或高度)。
通过将框架的Container设置为指向MultiFrame来关联框架。框架的MultiFramePosition选择其在序列中的位置,MultiFrameSize给出其尺寸作为MultiFrame可用范围的百分比。MultiFrameSize为0的框架共享固定尺寸框架布局后剩余的范围。
默认事件是Initialize。没有默认属性。
Private Sub Form_Load()
mfPanels.Direction = vbDirectionHorizontal
Set fraLeft.Container = mfPanels
fraLeft.MultiFramePosition = 0
fraLeft.MultiFrameSize = 30 ' fixed 30% of the strip
Set fraCenter.Container = mfPanels
fraCenter.MultiFramePosition = 1
fraCenter.MultiFrameSize = 0 ' shares the remaining space
Set fraRight.Container = mfPanels
fraRight.MultiFramePosition = 2
fraRight.MultiFrameSize = 0 ' shares the remaining space
End Sub方向和尺寸
Direction选择vbDirectionHorizontal(默认——框架从左到右排列)或vbDirectionVertical(框架从上到下堆叠)。在运行时更改Direction会触发立即重新布局。
对于每个包含的框架,MultiFrameSize给出其范围作为MultiFrame宽度(水平)或高度(垂直)的百分比。MultiFrameSize为0的框架平均共享剩余范围——因此典型模式是给边缘面板固定百分比,将一个中心面板保持为0使其吸收窗口调整大小。百分比不会被钳制;如果固定尺寸框架已超过MultiFrame的范围,自动调整尺寸的框架会收缩为零。
位置和重排
每个包含的框架通过其MultiFramePosition属性(零基)锚定到顺序位置。位置保持连续:在运行时为框架分配新的MultiFramePosition会使MultiFrame将其余框架上移或下移,使旧槽位关闭并在请求的索引处打开新槽位。重复或超出范围的位置在下一次布局传递时被规范化——MultiFrame回退到父窗体上的原始控件顺序,从0开始对框架重新编号。
Container是MultiFrame但MultiFramePosition为-1的框架在首次构建布局时被附加到下一个空闲槽位。
在运行时采用框架
框架到MultiFrame的映射在每次布局传递时从父窗体的控件集合中发现:当框架的Container属性指向MultiFrame时,框架出现在带中。发现集随后被缓存。要强制重建缓存——例如在运行时重新设置框架的父级后——给FramesCount赋任意值:
Set fraExtra.Container = mfPanels
mfPanels.FramesCount = 0 ' assigned value is ignored; the layout cache is rebuiltMultiFrame在原地重新定位框架的现有窗口;它不会更改框架的Win32父级,因此框架仍然是窗体的子级并继续正常引发其事件。
属性
Anchors
决定控件的哪些边随容器对应边调整的Anchors对象集合。只读——通过返回的Anchors对象设置各个.Left、.Top、.Right、.Bottom标志。
BackColor
MultiFrame绘图表面的背景色,作为OLE_COLOR。默认为系统窗口背景色。仅在包含的框架未完全覆盖范围时可见——例如当其MultiFrameSize之和小于100%时。
Container
承载此MultiFrame的控件——通常是窗体。用Get读取,用Set更改。设置Container在运行时将MultiFrame重新设置为其他容器的子级。
ControlType
标识此控件的只读ControlTypeConstants值。始终为vbShape。
Direction
包含框架的布局方向。MultiFrameDirectionConstants的成员:vbDirectionHorizontal(0,默认——框架从左到右排列)或vbDirectionVertical(1——框架从上到下堆叠)。更改Direction会触发包含框架的立即重新布局。
Dock
MultiFrame在其容器中的停靠位置。DockModeConstants的成员:vbDockNone(默认)、vbDockLeft、vbDockTop、vbDockRight、vbDockBottom或vbDockFill。停靠的MultiFrame忽略Anchors。
FramesCount
MultiFrame布局中当前Frame控件的数量。Long。
语法:object.FramesCount [ = value ]
读取FramesCount返回当前布局缓存的大小。赋任意值会丢弃缓存使其在下一次布局传递时重建——所赋的数值本身被忽略。将赋值用作运行时重新设置框架父级后的手动刷新。
Height
MultiFrame的高度,默认以缇为单位(或以容器的ScaleMode单位)。Double。
hWnd
MultiFrame绘图表面的Win32窗口句柄,作为LongPtr。只读。适用于传递给API函数。
Index
当MultiFrame是控件数组的一部分时,此实例在数组中的Long零基索引。在非数组实例上读取Index会引发运行时错误343(对象不是数组)。运行时只读。
Left
从容器的左边缘到MultiFrame左边缘的水平距离。Double。
Name
MultiFrame在其父窗体上的唯一设计时名称。运行时只读。
Parent
对最终包含MultiFrame的Form的引用。只读。与Container不同,后者返回直接父级。
TabIndex
MultiFrame在窗体TAB键导航顺序中的位置。Long。
INFO
MultiFrame自身从不获取焦点——TabIndex保留用于兼容但对用户无可见效果。
TabStop
MultiFrame是否参与TAB键导航。Boolean,默认True。
INFO
MultiFrame自身从不获取焦点——TabStop保留用于兼容但对用户无可见效果。
Tag
应用程序可用于将自定义数据与MultiFrame关联的自由格式String。框架忽略此属性。
Top
从容器顶部到MultiFrame顶部的垂直距离。Double。
Visible
MultiFrame是否显示。Boolean,默认True。包含框架自身的可见性与此设置无关;隐藏MultiFrame隐藏其绘图表面但不直接隐藏框架。
Width
MultiFrame的宽度。Double。
方法
Move
在单次调用中重新定位并可选地调整MultiFrame的尺寸。包含的框架会重新布局以匹配新的范围。
语法:object.Move Left [, Top [, Width [, Height ] ] ]
- Left
- 必需 给出新水平位置的Single。
- Top、Width、Height
- 可选 对应属性的新值。省略的值保持不变。
Refresh
强制立即重绘MultiFrame的绘图表面。
语法:object.Refresh
ZOrder
将MultiFrame带到容器内同级堆栈的前面或后面。
语法:object.ZOrder [ Position ]
- Position
- 可选 ZOrderConstants的成员:vbBringToFront(0,默认)或vbSendToBack(1)。
事件
Initialize
在MultiFrame的底层窗口已创建但第一次布局传递尚未运行后引发一次。适用于在启动时从代码调整Direction或包含框架的尺寸,使第一次布局就反映这些设置。默认事件。
语法:object_Initialize( )