我已根据屏幕尺寸调整了表单大小:
Me.width = Screen.width
Me.height = Screen.height
此外,我想根据我制作的表单大小调整控件的大小。
我尝试了循环:
For Each tmpControl In frm.Controls
If PrevResizeX = Empty Then
PrevResizeX = 1
End If
If PrevResizeY = Empty Then
PrevResizeY = 1
End If
tmpControl.Left = tmpControl.Left / PrevResizeX * Me.ScaleWidth
tmpControl.Top = tmpControl.Top / PrevResizeY * Me.ScaleHeight
tmpControl.width = tmpControl.width / PrevResizeX * Me.ScaleWidth
tmpControl.height = tmpControl.height / PrevResizeY * Me.ScaleHeight
Next tmpControl
它给了我错误:left property can not be read runtime.
Plz帮帮我。
答案 0 :(得分:1)
如果您的控件没有任何容器(如计时器,...),则会发生这种情况。
检查控制类型,以防止在没有容器的情况下调整constols的大小。
If Not TypeOf tmpControl Is Timer Then
...
End If
答案 1 :(得分:1)
我假设此代码位于包含其他代码的模块中,您可能有也可能没有现有错误处理。 Ali Mousavi Kherad是正确的,当他说当你试图在没有容器的情况下设置控件的位置时会产生错误。您的代码可能会生成您想要更正的错误,例如,如果数字太大,tmpControl.Left = tmpControl.Left / PrevResizeX * Me.ScaleWidth
可能会导致溢出错误。我建议将left,top,width和height属性定义为变量,并在将它们分配给控件之前执行某种测试。然后,在设置控件的位置时,您可以将代码包装在On Error Resume Next
语句中。如果在那一点上产生错误,可能是因为控件类似于定时器控件,你不关心它的位置是否无法设置。
Dim tmpControl As Control
Dim PrevResizeX As Integer
Dim PrevResizeY As Integer
Dim lngLeft as Long
Dim lngTop as Long
Dim lngWidth as Long
Dim lngHeight as Long
For Each tmpControl In Me.Controls
If PrevResizeX = Empty Then
PrevResizeX = 1
End If
If PrevResizeY = Empty Then
PrevResizeY = 1
End If
lngLeft = tmpControl.Left / PrevResizeX * Me.ScaleWidth
lngTop = tmpControl.Top / PrevResizeY * Me.ScaleHeight
lngWidth = tmpControl.Width / PrevResizeX * Me.ScaleWidth
lngHeight = tmpControl.Height / PrevResizeY * Me.ScaleHeight
' do some bounds checking here
' if everything is okay try to assign the new position to the control
On Error Resume Next ' ignore any error the Move method generates
tmpControl.Move lngLeft, lngTop, lngWidth, lngHeight
On Error GoTo 0 ' cancel the On Error Resume Next statement
Next tmpControl