机房收费--主界面(控件随窗体成比例改变)
? ? ? ?機房收費系統的主界面是用MDI窗體做的,遇到的第一個問題就是無法在窗體上放Command和textbox等無對齊屬性的控件,然后就需要用picturebox做容器存放這些無對齊屬性的控件。但是當運行起來的時候,另一個問題就又出現了,子窗體不能顯示出來,打開主窗體的時候,子窗體就潛水了。經過上網查資料,站在巨人的肩膀上,我了解到了一個方法:想讓父窗體顯示的同時,讓其他的控件也正常的顯示出來,不一定非要在MDI窗體上畫控件,我們可以采取借雞下蛋的方法,用一個窗體做容器,把這些控件放到窗體上,前提是要把窗體設置為子窗體,把其borderstype 設置為none,然后在MDI窗體加載的時候,子窗體也就同時加載出來,還不影響窗體上控件的顯示:
Private Sub MDIForm_Load()Form1.ShowForm1.Height = MDIForm1.ScaleHeightForm1.Width = MDIForm1.ScaleWidth End Sub? ? ? ?但是又會出現一個問題,就是點擊主窗體的空白處,子窗體就會隱藏起來,而且點不出來,這時就需要這里就用到了API函數中的SetParent函數。首先在模塊中聲明SetParent函數:
Public Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long? ? ? ?然后在MDI主窗體的菜單中找到想要顯示的窗體,在他的click事件中,編寫代碼就可以實現子窗體不再找不到:? ?
'格式說明:setparent +要顯示的子窗體.hwnd,MDI主窗體.hwnd Private Sub Registration_Click()frmregist.ShowSetParent FrmRegist.hwnd,frmmain.hwnd End Sub? ? ? ?在這個時候我想起了一個之前學生系統就出現的問題,那就是窗體上的控件不隨著窗體的改變而改變,這是不合理的,只有當調整窗體的大小時,其控件也跟著改變,這樣的窗體才更加的符合規范。
Option Explicit Private FormOldWidth As Long '保存窗體的原始寬度 Private FormOldHeight As Long '保存窗體的原始高度'在調用ResizeForm前先調用本函數 Public Sub ResizeInit(FormName As Form)Dim Obj As ControlFormOldWidth = FormName.ScaleWidthFormOldHeight = FormName.ScaleHeightOn Error Resume NextFor Each Obj In FormNameObj.Tag = Obj.Left & " " & Obj.Top & " " & Obj.Width & " " & Obj.Height & " "Next ObjOn Error GoTo 0 End Sub'按比例改變窗體內各控件的大小,在調用ReSizeForm前先調用ReSizeInit函數 Public Sub ResizeForm(FormName As Form)Dim Pos(4) As DoubleDim i As Long, TempPos As Long, StartPos As LongDim Obj As ControlDim ScaleX As Double, ScaleY As DoubleScaleX = FormName.ScaleWidth / FormOldWidth '保存窗體寬度縮放比例ScaleY = FormName.ScaleHeight / FormOldHeight '保存窗體高度縮放比例On Error Resume NextFor Each Obj In FormNameStartPos = 1For i = 0 To 4'讀取控件的原始位置與大小TempPos = InStr(StartPos, Obj.Tag, " ", vbTextCompare)If TempPos > 0 ThenPos(i) = Mid(Obj.Tag, StartPos, TempPos - StartPos)StartPos = TempPos + 1ElsePos(i) = 0End If'根據控件的原始位置及窗體改變大小的比例對控件重新定位與改變大小Obj.Move Pos(0) * ScaleX, Pos(1) * ScaleY, Pos(2) * ScaleX, Pos(3) * ScaleYNext iNext ObjOn Error GoTo 0 End SubPrivate Sub Form_Load()Call ResizeInit(Me) '在程序裝入時必須加入 End SubPrivate Sub Form_Resize()Call ResizeForm(Me) '確保窗體改變時控件隨之改變 End Sub效果圖如下:
總結
以上是生活随笔為你收集整理的机房收费--主界面(控件随窗体成比例改变)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 自考再总结
- 下一篇: 机房收费--一般用户