一勞永逸讓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。你可以將本程式拷到窗體程式碼段裡,然後在窗體里加入任意控制元件即可進行測試。
相關文章
- mysql亂碼?一勞永逸修改mysql字符集!MySql
- 一勞永逸——RecyclerView無型別強轉的通用ViewHolderView型別
- 一勞永逸,使用 PicGo + GitHub 搭建個人圖床工具PicGoGithub圖床
- Intel 提出 CPU 漏洞硬體保護方案:有望一勞永逸Intel
- 一勞永逸的優化!併發RPC呼叫小工具優化RPC
- WLAN-AC+AP射頻一勞永逸的調優方式
- java實現控制元件的移動及使用滑鼠改變控制元件大小Java控制元件
- flutter螢幕適配 ,一種一勞永逸的全域性適配方式Flutter
- 一勞永逸地“解決”沒完沒了的報表開發
- 一勞永逸,解決.NET釋出雲伺服器的時區問題伺服器
- event.path引數被瀏覽器刪除,如何一勞永逸的解決瀏覽器
- 王者併發課-鉑金3:一勞永逸-如何理解鎖的多次可重入問題
- 併發王者課-鉑金3:一勞永逸-如何理解鎖的多次可重入問題
- 一勞永逸,解決基於 keep-alive 的後臺多級路由快取問題Keep-Alive路由快取
- 內容創作者不要再複製貼上啦,一勞永逸自建個文章多發平臺吧!
- flutter之改變CupertinoSwitch的大小Flutter
- 從0開始設計Flutter獨立APP | 第三篇: 一勞永逸解決全域性BuildContext問題FlutterAPPUIContext
- 改變一個字元讓Go程式快42%字元Go
- 用js實現動態改變根元素字型大小的方法JS
- VB.net chart 控制元件使用控制元件
- js 改變 控制元件的屬性值JS控制元件
- tkinter中scale拖拉改變值控制元件(十一)控制元件
- js拖拽:右下角拖拽改變圖片大小JS
- [20181203]改變檔案大小與檢查點.txt
- XE 畫矩形實現拖拉改變大小(屬性)
- visio圓角矩形怎麼改變圓角大小
- css兩端固定大小,中間自動大小CSS
- 兩條命令讓你的git自動變基Git
- 選中按鈕改變文字大小和顏色
- 改變資料頁大小能帶來多少收益?
- 自動化將改變工作性質的5種方式
- 終生學習者,永遠勞苦命!
- VB:DEV控制元件之TreeList控制元件-獲取TreeList所有Node(遞迴)dev控制元件遞迴
- win10怎麼改變磁碟大小_win10調整硬碟分割槽大小方法Win10硬碟
- 採購自動化如何改變企業的財務運營?
- python字串格式化的過程中自動改變了格式Python字串格式化
- 物聯網裝置如何改變樓宇自動化行業?行業
- 真正的讓iframe自適應高度 相容多種瀏覽器隨著視窗大小改變瀏覽器
- 動態路由,透過id改變,改頁面路由