无法根据表单大小调整控件大小

时间:2014-01-21 10:51:06

标签: vb.net vb6

我已根据屏幕尺寸调整了表单大小:

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帮帮我。

2 个答案:

答案 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