让VB自动改变控件大小
当窗体大小发生变化时,如何动态改变控件的大小是很多VB程序员头疼的问题。有些人在不改变控件大小的情况下将表单设置为可调整大小;还有的重新定位控件,根据控件的绝对位置和窗口大小改变大小,比较繁琐,不可重用;当然也有人限制窗口,干脆不让换。有没有简单易行的方法?答案是肯定的,这里有一个一劳永逸的解决方案。源程序如下:
option explicit
privateformholdwidth has long
保存表单的原始宽度
privateformheight as long
保存表单的原始高度。
调用此函数
publicsubresizeinit(formnameasform)
dimobjascontrol
formoldwidth = FormName . scale width
FormOldHeight = FormName。scale height
OnErrorResumeNext
ForEachObjInFormName
Obj。标签=对象。左&""&Obj。Top&""
&Obj。宽度&""&Obj。height & " "
NextObj
on error goto 0
end sub
按比例更改表单中每个元素的大小,
调用ReSizeInit函数
PublicSubresize Form(formnameasForm)
dimpos(4)as double
dimiaslong,temppos aslong在调用resize Form之前,StartPosAsLong
DimObjAsControl
DimScaleXAsDouble,ScaleYAsDouble
scalex = formname.scalewidth/formoldwidth
保存窗体宽度缩放比例
Scaley = formname.scaleheight/formoldheight
保存窗体高度缩放比例
OnErrorResumeNext
Foreachobjformname
startpos = 1
for I = 0to 4
读取控件的原始位置和大小。
TempPos=InStr(StartPos,
Obj。标记,"",vbTextCompare)
IfTempPos > 0然后
Pos(i)=Mid(Obj。Tag,
StartPos,Temppos-start Pos)
start Pos = Temppos+1
else
Pos(I)= 0
endif
根据控件的原始位置和窗体更改大小的比例重新定位和更改控件的大小
Pos(1)
*ScaleY,Pos(2)*ScaleX,Pos(3)* ScaleY
Nexti
NextObj[]
程序加载时,private subform _ load()
callresize init(me)必须添加到
EndSub中。
private subform _ Resize()
callresize form(me)确保控件在表单改变时改变
EndSub
本例给出了两个函数:ResizeInit和ResizeForm。必须在调用ResizeForm之前调用ResizeInit。您可以将此程序复制到窗体的代码部分,然后在窗体中添加任何控件来测试它。
0条评论