簡體   English   中英

如何在調整窗體大小時自動調整窗體上的控件大小或重新定位控件?

[英]How to automatically resize or reposition controls on a form when the form is resized?

所以我試圖讓我的表格適合所有顯示器。 有些具有不同的顯示分辨率和比例。

我可以調整我的表單大小以適應顯示,但其內容的所有屬性都不會調整到新的大小。

我想要的是,如果窗體被縮放以適合顯示,窗體上的控件也應該調整。 特別是每個控件上的LeftTopWidthHeight等屬性。

尺寸可以縮小或放大。

可以(主要)以編程方式遍歷表單上的所有控件,而不必顯式調整每個控件。 您可能需要為某些類型的控件(例如計時器,我在示例中放置)添加一些例外,但通常您可以使用類似的東西:

  Option Explicit

  Private Type ControlInfo_type
    Left As Single
    Top As Single
    Width As Single
    Height As Single
    FontSize As Single
  End Type
  Dim ControlInfos() As ControlInfo_type

Private Sub Form_Load()

  Dim ThisControl As Control
  
  ReDim Preserve ControlInfos(0 To 0)
  ControlInfos(0).Width = Me.Width
  ControlInfos(0).Height = Me.Height
  For Each ThisControl In Me.Controls
    ReDim Preserve ControlInfos(0 To UBound(ControlInfos) + 1)
    With ControlInfos(UBound(ControlInfos))
      .Left = ThisControl.Left
      .Top = ThisControl.Top
      .Width = ThisControl.Width
      .Height = ThisControl.Height
      .FontSize = ThisControl.FontSize
    End With
  Next

End Sub

Private Sub Form_Resize()

  Dim ThisControl As Control, HorizRatio As Single, VertRatio As Single, Iter As Integer
  
  If Me.WindowState = vbMinimized Then Exit Sub
  
  HorizRatio = Me.Width / ControlInfos(0).Width
  VertRatio = Me.Height / ControlInfos(0).Height
  
  Iter = 0
  For Each ThisControl In Me.Controls
    Iter = Iter + 1
    With ThisControl
      .Left = ControlInfos(Iter).Left * HorizRatio
      .Top = ControlInfos(Iter).Top * VertRatio
      .Width = ControlInfos(Iter).Width * HorizRatio
      .Height = ControlInfos(Iter).Height * VertRatio
      .FontSize = ControlInfos(Iter).FontSize * HorizRatio
    End With
  Next
  
End Sub

我使用帶有命令按鈕、框架、計時器和文本框的默認表單對此進行了測試,它似乎工作正常。 您可能想要調整外觀的最小和最大尺寸的限制,而我對字體的處理非常粗糙; 這也可以優化。 但也許這可能是一個起點。

此代碼取決於控件每次都以相同的方式迭代,這可能會中斷。 解決此問題的一種方法是使用 Collection 或其他以控件名稱作為鍵的數據結構; 在.Resize 事件中進行迭代時,將按名稱查找每個控件。 如果任何控件本身是 arrays,則需要額外的結構,如果動態加載或卸載控件,則需要更多結構。

谷歌在尋找 VB6 自動調整大小解決方案時為我找到了這篇文章。 由於距上次活動僅一年,您可能會對我的經歷感興趣。

這段代碼很棒。 我在一個新項目中對其進行了測試,並簡單地從這里添加了代碼。 該窗體在相對較小的 window 上有 18 個控件(包括兩個大的 Listview),但可以隨意調整大小,甚至 go 可以全屏顯示。 所有控件都以非常有效的方式移動和/或更改大小,字體大小也是如此。 我調整了幾個標簽的大小和 position 以在全屏下完美地適應大文本,但除此之外它只是我想要的“靜態”設計。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM