我已经创建了一个功能齐全的程序,并将其发送给了一些客户。他们中的一些人拥有非常低分辨率的旧计算机,他们无法轻松访问它,因为表格和控件都是超大的。有没有一种简单的方法让我根据分辨率自动调整表单和控件的大小?
正如我在标题中所说,这是针对Visual Basic 6.0的。非常感谢你们所有人。
答案 0 :(得分:1)
您可以在表单上存储每个控件的大小和位置,并根据需要移动或调整控件大小。
在下面的代码中,我使用“TabIndex”属性作为每个控件的唯一ID(我不记得在我的旧VB6内存中,如果这是正确的事情......)。 我在Form_Load事件中存储表单的大小,每个控件的大小和位置。
Private lWidth As Long
Private lHeight As Long
Private Enum ePROPERTY
ep_Top = 0
ep_Left = 1
ep_Width = 2
ep_Height = 3
End Enum
Private aControlSize() As Long
Private Sub Form_Load()
Dim ctlTmp As Control
lWidth = Me.Width
lHeight = Me.Height
ReDim aControlSize(3, Form1.Controls.Count)
For Each ctlTmp In Form1.Controls
aControlSize(ctlTmp.TabIndex, ep_Top) = ctlTmp.Top
aControlSize(ctlTmp.TabIndex, ep_Left) = ctlTmp.Left
aControlSize(ctlTmp.TabIndex, ep_Width) = ctlTmp.Width
aControlSize(ctlTmp.TabIndex, ep_Height) = ctlTmp.Height
Next
End Sub
然后每次调整表单大小(Form_resize事件)时,您必须移动或调整每个控件的大小。 其中一些需要锚定在右侧或底部(或两者)。有些需要调整大小并移动。其他人则不需要任何东西。
Private Sub Form_Resize()
Dim ctlTmp As Control
For Each ctlTmp In Form1.Controls
Select Case LCase$(ctlTmp.Name)
Case "text1"
' Text1 is anchored to the left and right borders of the form :
ctlTmp.Width = Me.Width - (lWidth - aControlSize(ctlTmp.TabIndex, ep_Width))
Case "command1"
' Command1 is anchored to the right border of the form :
ctlTmp.Left = aControlSize(ctlTmp.TabIndex, ep_Left) - (lWidth - Me.Width)
Case "check1"
' check1 is anchored to the bottom border of the form :
ctlTmp.Top = aControlSize(ctlTmp.TabIndex, ep_Top) - (lHeight - Me.Height)
End Select
Next
End Sub
表单已加载:
表单已调整大小:
请注意,我的代码基本上是可以完善的......
可能有一个更优雅的解决方案,通过重载每个控件,并添加像dotnet中现有的属性/方法。