我正在使用Access 2013工作,有一些控件(列表框、按钮等)需要在表单调整大小时保持居中。锚定无法实现我想要的效果,因为我不想将控件锁定在顶部/底部/左侧/右侧,而是希望它们保持在中心位置。在表单的调整大小事件上简单地使用像这样的代码me.mycontrol.left = myform.Width/2不能达到我想要的效果,因为它会将各个控件对齐到中心。我想让控件组保持居中,是否有方法可以实现呢?
编辑:这里有一个例子,可能会更清晰地说明问题。假设我有一个100 x 100的表单,上面有两个按钮。按钮高度为20个单位,间隔为10个单位。它们的位置如下:
Button1.Top = 25 (10个单位的空间从45开始) Button2.Top = 55
如果将表单调整为200 x 200,则控件的位置如下:
Button1.Top = 75 (10个单位的空间从95开始) Button2.top = 105
理想情况下,我希望将其转换为一个模块,只需传递一个表单,它就可以获取每个控件的原始位置并计算新位置。
编辑2:
这是一个失败的尝试,使用了我的真实代码,基于Krish的想法:
编辑:这里有一个例子,可能会更清晰地说明问题。假设我有一个100 x 100的表单,上面有两个按钮。按钮高度为20个单位,间隔为10个单位。它们的位置如下:
Button1.Top = 25 (10个单位的空间从45开始) Button2.Top = 55
如果将表单调整为200 x 200,则控件的位置如下:
Button1.Top = 75 (10个单位的空间从95开始) Button2.top = 105
理想情况下,我希望将其转换为一个模块,只需传递一个表单,它就可以获取每个控件的原始位置并计算新位置。
编辑2:
这是一个失败的尝试,使用了我的真实代码,基于Krish的想法:
Private Sub Form_Resize()
Dim resizeFactor As Double
resizeFactor = Me.WindowWidth / Me.Width
Me.lstModule.Left = Me.lstModule.Left * resizeFactor
Me.ctlSubform.Left = Me.ctlSubform.Left * resizeFactor
Me.Box6.Left = Me.Box6.Left * resizeFactor
End Sub