1. 程式人生 > >VB控制元件隨窗體最大化變化的方法

VB控制元件隨窗體最大化變化的方法

   在開發中,往往開發人員需要控制控制元件大小適應視窗的大小,使得軟體在不同的解析度下也顯得比例協調.那麼,怎麼才能讓窗體中控制元件自動隨窗體變化大小呢?

   有三種方法供選擇:1、用程式碼控制特定的控制元件隨著窗體最大化展現出自己所希望的結果。第一步:窗體LOAD事件時記下每一個控制元件的位置屬性和大小,並取得視窗大小的屬性值。第二步:計算縮放比,就是用控制元件的LEFTWIDTH屬性分別除以視窗的WIDTH屬性值得到兩個比值X1,X2。再用控制元件的TOPheight屬性值分別除以視窗的HEIGHT屬性值得到兩個比值Y1,Y2。第三步:在窗體的Resize的事件中,控制元件的位置和大小

=窗體的大小*比值。總結:這樣各個控制元件的位置和大小由窗體的大小決定。這個問題還可以延伸:A;窗體大小改變時,控制元件位置改變但大小不改變。B;窗體大小改變時,控制元件大小改變但位置不改變。
       這兩個問題還可以細化窗體的
WIDTH屬性和height屬性值分別變化對控制元件的大小和位的影響。總共有六個情況。你可以開啟酷狗,當你改變它的窗體大小時,你仔細觀察它裡面的控制元件的大小和位置的變化情況,細細的品味這種變化。相信你能自己寫出程式碼,這個並不太難。

    2、使用第三方軟體,但是效果很差,而且需要安裝第三方軟體,非常沒有必要。

    3、比較推薦的一種方法:

'窗體最大化定義

Private FormOldWidth  As Long

   '原始寬度

   Private FormOldHeight  As Long

   '原始高度

   '在呼叫ResizeForm前先呼叫本函式

   Public Sub ResizeInit(FormName As Form)

   Dim Obj  As Control

   FormOldWidth = FormName.ScaleWidth

   FormOldHeight = FormName.ScaleHeight

   On Error Resume Next

   For Each Obj In FormName

   Obj.Tag = Obj.Left & "    " & Obj.Top & "    " & Obj.Width & "    " & Obj.Height & "    "

   Next Obj

   On Error GoTo 0

   End Sub

   '按比例改變表單內各元件的大小,

   '在呼叫ReSizeForm前先呼叫ReSizeInit函式

   Public Sub ResizeForm(FormName As Form)

   Dim Pos(4)      As Double

   Dim I      As Long, TempPos        As Long, StartPos        As Long

   Dim Obj      As Control

   Dim ScaleX      As Double, ScaleY        As Double

   ScaleX = FormName.ScaleWidth / FormOldWidth

   '儲存窗體寬度縮放比例

   ScaleY = FormName.ScaleHeight / FormOldHeight

   '儲存窗體高度縮放比例

   On Error Resume Next

   For Each Obj In FormName

   StartPos = 1

   For I = 0 To 4

   '讀取控制元件的原始位置與大小

   TempPos = InStr(StartPos, Obj.Tag, "    ", vbTextCompare)

   If TempPos > 0 Then

   Pos(I) = Mid(Obj.Tag, StartPos, TempPos - StartPos)

   StartPos = TempPos + 1

   Else

   Pos(I) = 0

   End If

   '根據控制元件的原始位置及窗體改變大小

   '的比例對控制元件重新定位與改變大小

   Obj.Move Pos(0) * ScaleX, Pos(1) * ScaleY, Pos(2) * ScaleX, Pos(3) * ScaleY

   Next I

   Next Obj

   On Error GoTo 0

   End Sub

Private Sub Form_Resize() 

ResizeForm Me      '控制元件隨之改變

End Sub

Private Sub Form_Load()

   Call ResizeInit(Me)    '確保窗體改變時控制元件隨之改變

End Sub

注意:1、宣告語句“Private FormOldWidth  As Long”和“Private FormOldHeight  As Long”不可以放到“End sub”後

          2、如果出現除數為零的情況,需要調整控制元件的大小。