一勞永逸讓VB自動改變控制元件大小
-------------------------------------------------------------------
當窗體大小改變時,如何動態的改變控制元件的大小是許多VB 程式設計師頭痛的事。有的人設定窗體Resizable 但卻不改變控制元件的大小;有的人則根據控制元件的絕對位置與視窗大小相加減的辦法來重新定位控制元件與改變大小,這種辦法比較繁瑣,且不可重用;當然也有人則限定視窗乾脆不讓改變。有沒有一種簡便易行的辦法?答案是肯定的,下面給出一個一勞永逸的辦法,源程式如下:
Option Explicit
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_Load()
Call ResizeInit(Me) '在程式裝入時必須加入
End Sub
Private Sub Form_Resize()
Call ResizeForm(Me) '確保窗體改變時控制元件隨之改變
End Sub
本例中給出了二個函式: ResizeInit 和 ResizeForm ,在呼叫 ResizeForm 之前必須先呼叫 ResizeInit。你可以將本程式拷到窗體程式碼段裡,然後在窗體里加入任意控制元件即可進行測試。
相關文章
- 一勞永逸的搞定 flex 佈局Flex
- mysql亂碼?一勞永逸修改mysql字符集!MySql
- 一勞永逸,使用 PicGo + GitHub 搭建個人圖床工具PicGoGithub圖床
- vb窗體中控制元件自動隨窗體變化大小(原始碼)控制元件原始碼
- Intel 提出 CPU 漏洞硬體保護方案:有望一勞永逸Intel
- 一勞永逸——RecyclerView無型別強轉的通用ViewHolderView型別
- 共享一勞永逸的資料庫編碼解決方案資料庫
- 一勞永逸的優化!併發RPC呼叫小工具優化RPC
- flutter螢幕適配 ,一種一勞永逸的全域性適配方式Flutter
- 一勞永逸地“解決”沒完沒了的報表開發
- 一勞永逸,解決.NET釋出雲伺服器的時區問題伺服器
- java實現控制元件的移動及使用滑鼠改變控制元件大小Java控制元件
- 實現控制元件的移動、改變大小(DELPHI實現) (轉)控制元件
- event.path引數被瀏覽器刪除,如何一勞永逸的解決瀏覽器
- 併發王者課-鉑金3:一勞永逸-如何理解鎖的多次可重入問題
- 王者併發課-鉑金3:一勞永逸-如何理解鎖的多次可重入問題
- 在執行時使用滑鼠移動控制元件和改變控制元件的大小 (轉)控制元件
- Vb中控制元件的自動排列 (轉)控制元件
- 一勞永逸,解決基於 keep-alive 的後臺多級路由快取問題Keep-Alive路由快取
- 內容創作者不要再複製貼上啦,一勞永逸自建個文章多發平臺吧!
- 從0開始設計Flutter獨立APP | 第三篇: 一勞永逸解決全域性BuildContext問題FlutterAPPUIContext
- flutter之改變CupertinoSwitch的大小Flutter
- EditText只改變Hint字型大小
- 改變日誌檔案大小
- Qt 程式改變文字大小QT
- 使用vb指令碼讓電腦自動加入域原始碼指令碼原始碼
- js實現的拖動改變視窗大小功能JS
- 改變一個字元讓Go程式快42%字元Go
- IT自動化改變企業創新方式
- 怎樣改變重做日誌的大小
- vm虛擬機器改變硬碟大小虛擬機硬碟
- 改變歸檔日誌檔案大小
- Android 動態佈局 動態生成 銷燬控制元件 改變控制元件的位置等Android控制元件
- 在VB程式中,透過程式碼改變Combo控制元件只讀屬性Style值 (轉)控制元件
- 終生學習者,永遠勞苦命!
- [筆記]RAC上改變redo logfile大小筆記
- [VB.net][WinForm]Panel控制元件移動\滑鼠拖動ORM控制元件
- js 改變 控制元件的屬性值JS控制元件