VB中如何设置窗体内控件大小随窗体大小改变而改变?
一、VB中如何设置窗体内控件大小随窗体大小改变而改变?
先在Form_Load中记录控件的相对位置及大小比例,然后在Form_Resize中按比例设置控件的位置及大小即可:
Dim ll As Single, tt As Single, ww As Single, hh As Single
Private Sub Form_Load()
ll = Text1.Left / Me.ScaleWidth
tt = Text1.Top / Me.ScaleHeight
ww = Text1.Width / Me.ScaleWidth
hh = Text1.Height / Me.ScaleHeight
End Sub
Private Sub Form_Resize()
Text1.Left = Me.ScaleWidth * ll
Text1.Top = Me.ScaleHeight * tt
Text1.Width = Me.ScaleWidth * ww
Text1.Height = Me.ScaleHeight * hh
End Sub
如果控件比较多的话,就要用数组了。
二、VB控件大小随窗体改变而改变
‘功能::窗体大小改变时窗体内的控件大小也随之动态改变
‘使用方法:
‘在相应的窗体程序中加入如下语句:
’—————————————————
‘Private Sub Form_Load()
’ Call ResizeInit(Me) ‘在程序装入时必须加入
‘End Sub
‘Private Sub Form_Resize()
’ Call ResizeForm(Me) ‘确保窗体改变时控件随之改变
‘End Sub
’—————————————————
Option Explicit
Private FormOldWidth As Long ‘保存窗体的原始宽度
Private FormOldHeight As Long ‘保存窗体的原始高度
‘在调用ResizeForm前先调用本函数
Public Sub ResizeInit(FormName As Form)
Dim Obj As Control
FormOldWidth = FormName.ScaleWidth
FormOldHeight = FormName.ScaleHeight
On Error Resume Next

For Each Obj In FormName
Obj.Tag = Obj.Left & “ ” & Obj.Top & “ ” & Obj.Width & “ ” & Obj.Height & “ “
Next Obj
On Error GoTo 0
End Sub
‘按比例改变表单内各元件的大小,在调用ReSizeForm前先调用ReSizeInit函数
Public Sub ResizeForm(FormName As Form)
Dim Pos(4) As Double
Dim i As Long, TempPos As Long, StartPos As Long
Dim Obj As Control
Dim ScaleX As Double, ScaleY As Double
ScaleX = FormName.ScaleWidth / FormOldWidth ‘保存窗体宽度缩放比例
ScaleY = FormName.ScaleHeight / FormOldHeight ‘保存窗体高度缩放比例
On Error Resume Next
For Each Obj In FormName
StartPos = 1
For i = 0 To 4
‘读取控件的原始位置与大小
TempPos = InStr(StartPos, Obj.Tag, ” “, vbTextCompare)
If TempPos > 0 Then
Pos(i) = Mid(Obj.Tag, StartPos, TempPos - StartPos)
StartPos = TempPos + 1
Else
Pos(i) = 0
End If
‘根据控件的原始位置及窗体改变大小的比例对控件重新定位与改变大小
Obj.Move Pos(0) * ScaleX, Pos(1) * ScaleY, Pos(2) * ScaleX, Pos(3) * ScaleY
Next i
Next Obj
On Error GoTo 0
End Sub
三、VB 控件大小随窗体改变而改变。含有TIMER控件
朋友你好! 首先想了解你的目的 ,其实控件随窗体大小而改变大小,是可以做到的,但是我做过的效果并不理想,并且代码很多。简单说一下思路: 根据窗体的高,宽比的改变而改变:假设设计时,窗体的高为MeH0,窗体宽为MeW0。 当窗体大小改变,新的高为MeH1,新的宽为MeH1。 这样得到比例:Hb = MeH1/MeH0,Wb = MeW1/MeW0, 于是:控件的高与宽分别乘以Hb,Wb就可以了,当然,控件的Left和Top也要分别乘以Wb和Hb了。需要存储所有控件的原始大小和位置。例如,按钮Command1,要寄存: Cm1H = Command1.Height Cm1W = Command1.Width Cm1L = Command1.Left Cm1T = ***.top 一旦窗体改变,求得Hb和Wb,控件的大小及位置改变: Command1.Height = Cm1H * Hb Command1.Width = Cm1W * Wb Command1.Left = Cm1L * Wb ***.top = Cm1T * Hb最后还是说,控件的改变并不会受Timer控件的限制?好似与又没有Timer控件无关的!因为控件多,我不是每个控件单独调整。。。是整体的调整。所以timer有影响
不知道怎么抛开他
Timer控件在运行的时候是看不见的,所以不管它在什么位置或多大,都不会影响程序运行的?
虽然运行的时候看不见,但是是有影响的。应该是要加一个判断,除去timer,但是不会加。
你可以用以下代码,枚举返回窗体上所有的控件名称。
Dim Con As Control
For Each Con In Form1.Controls
Print Con.Name
Next
谢谢,可以看到名称。但是我不知道 在程序里 怎么除去对timer的大小调整。因为只要调整timer程序就会出错
假设你对控件的名称没有修改过,采用默认的名称:
Dim Con As Control
For Each Con In Form1.Controls
if left(***.Name,5)) = “Timer” then
’是Timer控件就不操作
Else
'不是Timer控件就做相应操作
’具体操作你自己写代码吧!
End If
Next