2

我猜这是不可能的,但是就这样吧。

Java 和最近的 .Net 更新能够实现流布局——布局管理器重新排列表单控件以适应可用空间。

我只见过使用硬编码绝对位置的 VBA 和 WinForms。

有没有人在这种情况下遇到过流布局管理器?

4

3 回答 3

3

我有一个这样布置的表格。我的所有控件都根据它们的垂直位置依次命名:txt_R1、txt_R2、txt_R3 等...

表单设计

当表单加载时,它看起来像这样:

已加载表单

当我更新组合框时,将执行以下代码:

Dim s_tier As String
Dim s_rate As String
Dim s_lbl_Rate As String
Dim s_lbl_Tier As String
Dim s_obj As String

Me.TXT_Min.Visible = True
Me.LBL_MIN.Visible = True
Me.TXT_Min.Value = 0

Me.TXT_Scale.Visible = True
Me.lbl_Scale.Visible = True
Me.TXT_Scale.Value = 0

Me.txt_MinMax.Visible = True
Me.lbl_MinMax.Visible = True
Me.txt_MinMax.Value = 0

s_tier = "TXT_T"
s_rate = "TXT_R"
s_lbl_Rate = "LBL_R"
s_lbl_Tier = "LBL_T"

For i = 1 To numActive
    
    'Tier Text Box
    s_obj = s_tier & i
    
    Me(s_obj).Visible = True
    Me(s_obj).Value = "NULL"
    
    'Tier Label
    s_obj = s_lbl_Tier & i
    
    Me(s_obj).Visible = True
                            
    'Rate Text Box
    s_obj = s_rate & i
    
    Me(s_obj).Visible = True
    Me(s_obj).Value = "NULL"
    
    'Rate Label
    s_obj = s_lbl_Rate & i
    
    Me(s_obj).Visible = True

Next i

'set last tier to infinite, since last tier typically goes on forever
s_obj = s_tier & numActive

Me(s_obj).Value = ChrW(&H221E)
Me(s_obj).FontSize = 16

'Make Test button visible and move to appropriate place

s_obj = s_lbl_Tier & (numActive + 1)

Me.Btn_Test.Top = Me(s_obj).Top
Me.Btn_Test.Left = Me(s_obj).Left
Me.Btn_Test.Visible = True

s_obj = s_tier & (numActive + 1)
'Make Test button visible and move to appropriate place
    
Me.btn_SQL.Top = Me(s_obj).Top
Me.btn_SQL.Left = Me(s_obj).Left
Me.btn_SQL.Visible = True
Me.Refresh

如果在组合框中选择了“1”,则刷新后的表单现在如下所示: 选择一个选项

...或者如果在组合框中选择了“2”: 选择一个选项

...或者如果在组合框中选择了“3”: 选择一个选项

我的方法的关键是使用顺序命名约定来利用

for i = 1 to numactive

一段代码。循环结束后,所有静态控件都可见。我可以将 numactive 变量添加 1 以确定第一个不可见控件的位置,并将我的“浮动”控件锚定到该位置。

可以调整此方法以使用偏移量而不是其他控件的位置实际将任何控件放置到任何位置。让想象力自由驰骋!

于 2012-06-29T22:00:05.150 回答
3

Access 2007 及更高版本通过锚定实现此功能:使控件在调整窗体大小时拉伸、缩小或移动

如果您想在早期版本中执行此操作,您可以使用表单的 On Resize 事件自行滚动。

于 2012-06-29T15:20:46.430 回答
1

WinForms 当然有FlowLayoutPanelTableLayoutPanel ..

MSDN 上有一个AutoLayout for Winforms 的示例

于 2012-06-29T15:19:10.367 回答