Winforms VBA表单能否具有流布局?

Winforms VBA表单能否具有流布局?,winforms,ms-access,vba,layout,Winforms,Ms Access,Vba,Layout,我猜这是不可能的,但事情是这样的 Java和最近的.Net更新都支持流布局,布局管理器会重新安排表单控件以适应可用空间 我只见过VBA和WinForms使用硬编码的绝对位置 是否有人遇到过此上下文中的流布局管理器?WinForms当然有和 有一个。Access 2007和更高版本通过锚定实现此功能: 如果您想在早期版本中执行此操作,您可以使用表单的On Resize事件来滚动自己的表单。我有一个这样布置的表单。我所有的控件都是根据它们的垂直位置顺序命名的:txt_R1、txt_R2、txt_R3

我猜这是不可能的,但事情是这样的

Java和最近的.Net更新都支持流布局,布局管理器会重新安排表单控件以适应可用空间

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


是否有人遇到过此上下文中的流布局管理器?

WinForms当然有和


有一个。

Access 2007和更高版本通过锚定实现此功能:


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

我有一个这样布置的表单。我所有的控件都是根据它们的垂直位置顺序命名的: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来确定第一个不可见控件的位置,并将我的“浮动”控件锚定到该位置


可以调整此方法,以使用偏移(而不是其他控件的位置)将任何控件实际放置到任何位置。让你的想象力尽情发挥吧

我很感激这在.Net中是可能的——尽管它似乎很少被使用。但是你知道VBA解决方案吗?啊,这是我需要注意的新功能,谢谢。现在,我想知道我的客户何时会“跃进”并采用Access 2007;-)