日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

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

發(fā)布時(shí)間:2025/3/21 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 机房收费--主界面(控件随窗体成比例改变) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

? ? ? ?機(jī)房收費(fèi)系統(tǒng)的主界面是用MDI窗體做的,遇到的第一個(gè)問(wèn)題就是無(wú)法在窗體上放Command和textbox等無(wú)對(duì)齊屬性的控件,然后就需要用picturebox做容器存放這些無(wú)對(duì)齊屬性的控件。但是當(dāng)運(yùn)行起來(lái)的時(shí)候,另一個(gè)問(wèn)題就又出現(xiàn)了,子窗體不能顯示出來(lái),打開(kāi)主窗體的時(shí)候,子窗體就潛水了。經(jīng)過(guò)上網(wǎng)查資料,站在巨人的肩膀上,我了解到了一個(gè)方法:想讓父窗體顯示的同時(shí),讓其他的控件也正常的顯示出來(lái),不一定非要在MDI窗體上畫(huà)控件,我們可以采取借雞下蛋的方法,用一個(gè)窗體做容器,把這些控件放到窗體上,前提是要把窗體設(shè)置為子窗體,把其borderstype 設(shè)置為none,然后在MDI窗體加載的時(shí)候,子窗體也就同時(shí)加載出來(lái),還不影響窗體上控件的顯示:

Private Sub MDIForm_Load()Form1.ShowForm1.Height = MDIForm1.ScaleHeightForm1.Width = MDIForm1.ScaleWidth End Sub

? ? ? ?但是又會(huì)出現(xiàn)一個(gè)問(wèn)題,就是點(diǎn)擊主窗體的空白處,子窗體就會(huì)隱藏起來(lái),而且點(diǎn)不出來(lái),這時(shí)就需要這里就用到了API函數(shù)中的SetParent函數(shù)。首先在模塊中聲明SetParent函數(shù):

Public Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long

? ? ? ?然后在MDI主窗體的菜單中找到想要顯示的窗體,在他的click事件中,編寫(xiě)代碼就可以實(shí)現(xiàn)子窗體不再找不到:? ?

'格式說(shuō)明:setparent +要顯示的子窗體.hwnd,MDI主窗體.hwnd Private Sub Registration_Click()frmregist.ShowSetParent FrmRegist.hwnd,frmmain.hwnd End Sub

? ? ? ?在這個(gè)時(shí)候我想起了一個(gè)之前學(xué)生系統(tǒng)就出現(xiàn)的問(wèn)題,那就是窗體上的控件不隨著窗體的改變而改變,這是不合理的,只有當(dāng)調(diào)整窗體的大小時(shí),其控件也跟著改變,這樣的窗體才更加的符合規(guī)范。

Option Explicit Private FormOldWidth As Long '保存窗體的原始寬度 Private FormOldHeight As Long '保存窗體的原始高度'在調(diào)用ResizeForm前先調(diào)用本函數(shù) 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'按比例改變窗體內(nèi)各控件的大小,在調(diào)用ReSizeForm前先調(diào)用ReSizeInit函數(shù) 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'根據(jù)控件的原始位置及窗體改變大小的比例對(duì)控件重新定位與改變大小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) '在程序裝入時(shí)必須加入 End SubPrivate Sub Form_Resize()Call ResizeForm(Me) '確保窗體改變時(shí)控件隨之改變 End Sub

效果圖如下:

總結(jié)

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

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。