讓VB自動(dòng)改變控件大小

字號(hào):

當(dāng)窗體大小改變時(shí),如何動(dòng)態(tài)的改變控件的大小是許 多VB程序員頭痛的事。有的人設(shè)置窗體Resizable但卻不改變控件的大??;有的人則根據(jù)控件 的絕對(duì)位置與窗口大小相加減的辦法來重新定位控件與改變大小,這種辦法比較繁瑣,且不 可重用;當(dāng)然也有人則限定窗口干脆不讓改變。 有沒有一種簡(jiǎn)便易行的辦法?答案是肯定的, 下面給出一個(gè)一勞永逸的辦法,源程序如下:
    OptionExplicit
    PrivateFormOldWidthAsLong
    保存窗體的原始寬度
    PrivateFormOldHeightAsLong
    保存窗體的原始高度
    在調(diào)用ResizeForm前先調(diào)用本函數(shù)
    PublicSubResizeInit(FormNameAsForm)
    DimObjAsControl
    FormOldWidth=FormName.ScaleWidth
    FormOldHeight=FormName.ScaleHeight
    OnErrorResumeNext
    ForEachObjInFormName
    Obj.Tag=Obj.Left&""&Obj.Top&""
    &Obj.Width&""&Obj.Height&""
    NextObj
    OnErrorGoTo0
    EndSub
    按比例改變表單內(nèi)各元件的大小,
    在調(diào)用ReSizeForm前先調(diào)用ReSizeInit函數(shù)
    PublicSubResizeForm(FormNameAsForm)
    DimPos(4)AsDouble
    DimiAsLong,TempPosAsLong,StartPosAsLong
    DimObjAsControl
    DimScaleXAsDouble,ScaleYAsDouble
    ScaleX=FormName.ScaleWidth/FormOldWidth
    保存窗體寬度縮放比例
    ScaleY=FormName.ScaleHeight/FormOldHeight
    保存窗體高度縮放比例
    OnErrorResumeNext
    ForEachObjInFormName
    StartPos=1
    Fori=0To4
    讀取控件的原始位置與大小
    TempPos=InStr(StartPos,
    Obj.Tag,"",vbTextCompare)
    IfTempPos>0Then
    Pos(i)=Mid(Obj.Tag,
    StartPos,TempPos-StartPos)
    StartPos=TempPos+1
    Else
    Pos(i)=0
    EndIf
    根據(jù)控件的原始位置及窗體改變大小
    的比例對(duì)控件重新定位與改變大小
    Obj.MovePos(0)*ScaleX,Pos(1)
    *ScaleY,Pos(2)*ScaleX,Pos(3)*ScaleY
    Nexti
    NextObj
    OnErrorGoTo0
    EndSub
    PrivateSubForm_Load()
    CallResizeInit(Me)在程序裝入時(shí)必須加入
    EndSub
    PrivateSubForm_Resize()
    CallResizeForm(Me)確保窗體改變時(shí)控件隨之改變
    EndSub
    本例中給出了二個(gè)函數(shù):ResizeInit和ResizeForm, 在調(diào)用ResizeForm之前必須先調(diào)用ResizeInit。你可以將本程序拷到窗體代碼段里,然后在 窗體里加入任意控件即可進(jìn)行測(cè)試。