日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

机房收费--主界面(控件随窗体成比例改变)

發布時間:2025/3/21 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 机房收费--主界面(控件随窗体成比例改变) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? ? ?機房收費系統的主界面是用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

效果圖如下:

總結

以上是生活随笔為你收集整理的机房收费--主界面(控件随窗体成比例改变)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。