请教 VB 自动调整控件位置但不改变控件大小的代码

我在网上查了很久,一直都是随窗体变化而自动调整窗体内的控件位置及控件大小的代码,苦于本人也是初学者,请各位高手能帮一下下忙,在下感激不尽.
我的要求是:
只随窗体的变化自动调整窗体内的控件位置,就是按最初的比例在窗体变化后自动调整控件的位置,但不改变控件的大小.

'窗体部分
Private Sub Form_Resize()
'确保窗体改变时控件随之改变
Call ResizeForm(Me)
End Sub
Private Sub Form_Load()
'在程序装入时必须加入
Call ResizeInit(Me)
End Sub

'模块部分
Option Explicit
Private ObjOldWidth As Long '保存窗体的原始宽度
Private ObjOldHeight As Long '保存窗体的原始高度
Private ObjOldFont As Single '保存窗体的原始字体比
' '在调用ResizeForm前先调用本函数
Public Sub ResizeInit(FormName As Form)
Dim Obj As Control

ObjOldWidth = FormName.ScaleWidth
ObjOldHeight = FormName.ScaleHeight
ObjOldFont = FormName.Font.Size / ObjOldHeight
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 / ObjOldWidth
'保存窗体宽度缩放比例
ScaleY = FormName.ScaleHeight / ObjOldHeight
'保存窗体高度缩放比例
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
Obj.Font.Size = ObjOldFont * FormName.ScaleHeight
Next i

Next Obj

End Sub

按照这段代码的话,这就是随窗体自动改变控件的(left,top,width,height,font)属性,现在我只要求改(left,top)的属性.

谢谢各位高手了

第1个回答  2010-01-15
Obj.Move Pos(0) * ScaleX, Pos(1) * ScaleY, Pos(2) * ScaleX, Pos(3) * ScaleY

改为

Obj.Move Pos(0) * ScaleX, Pos(1) * ScaleY

就可以只改变位置不改变大小了
第2个回答  2010-01-15
Dim ww As Single, hh As Single

Private Sub Form_Load()
ww = Me.ScaleWidth
hh = Me.ScaleHeight
End Sub

Private Sub Form_Resize()
Dim nn As Control
Dim ww1 As Single, hh1 As Single

ww1 = Me.ScaleWidth / ww
hh1 = Me.ScaleHeight / hh
For Each nn In Me.Controls
nn.Move nn.Left * ww1, nn.Top * hh1
Next

ww = Me.ScaleWidth
hh = Me.ScaleHeight
End Sub

nn.Move nn.Left * ww1, nn.Top * hh1, nn.Width * ww1, nn.Height * hh1
就可以改变控件的大小了本回答被提问者采纳
第3个回答  2010-01-15
Private Sub Form_Resize()
t1.Width = Form1.Width * 0.2
t1.Height = Form1.Height * 0.2
End Sub

这个 0.2就是控件占form1的比例
改left top 一样

请教VB 自动调整控件位置但不改变控件大小的代码
Obj.Move Pos(0) * ScaleX, Pos(1) * ScaleY 就可以只改变位置不改变大小了

用VB如何设置控件的相对位置,不论窗体怎么变化,相对位置不变化
控件.top=form1.top *b 即可

VB 中如何使控件位置和大小自动适应窗体变化?
1. 在窗体上添加一个框架控件。2. 将需要自动适应窗体变化的控件(如按钮)拖放到框架内。3. 调整框架的大小和位置。当窗体大小变化时,框架内的控件也将自动调整大小和位置,从而实现随窗体变化的自适应。使用框架控件能简化控件布局的调整工作,提高代码的可维护性和灵活性。通过将控件放入框架内,只...

如何让VB窗体设值好后,里面的控件会随之变大而不变?
Dim myX As Double, myY As Double '用于保存文本框位置的比例 Dim myX1 As Double, myY1 As Double '用于保存文本框大小的比例 Private Sub Form_Load()myX = Text1.Left \/ Me.ScaleWidth myY = Text1.Top \/ Me.ScaleHeight myX1 = Text1.Width \/ Me.ScaleWidth myY1 = Text1.Height...

VB 中如何使控件位置和大小自动适应窗体变化?
可把有关按钮放在一个Frame框架内,这样当窗体改变大小时,不用去改变每个按钮的大小和位置了,只需要改变这个Frame的大小和位置就可以了

vb中怎么调节控件的位置,要打代码的
command1.top=100 '设置按钮的顶部和窗口顶部的距离 command1.left=100 '设置按钮的左侧和窗口左侧的距离 command1.height=100 '设置按钮的高度 command1.width=200 '设置按钮的宽度

VB怎样用代码来排列控件?
Private Sub Form_Load()t1 = 500 '与窗体上边距离 l1 = 500 '与窗体左边距离 For i = 1 To 26 Check1(i).Move l1, t1 '将控件移到指定位置 l1 = l1 + 1000 '控件宽度 If i Mod 6 = 0 Then '每隔六个 t1 = t1 + 800 '将t1加上一定距离 l1 = 500 '与窗体左边距离归回...

如何动态的改变控件的大小
当窗体大小改变时,是许多VB 程序员头痛的事。有的人设置窗体Resizable 但却不改变控件的大小;有的人则根据控件的绝对位置与窗口大小相加减的办法来重新定位控件与改变大小,这种办法比较繁琐,且不可重用;当然也有人则限定窗口干脆不让改变。有没有一种简便易行的办法?答案是肯定的,下面给出一个一...

VB 自动调整控件位置的代码,请多点解释。 _Resize() 不会用,最好是完 ...
一、控件的位置是由控件的左上角指定的,即Left和Top属性。调整位置只要修改这两个属性就可以了。当然用Move方法可以一步到位,在移动的同时调整大小。二、位置的计算用到容器的尺寸时通常使用有Scale开头的高度宽度,因为这些属性是指容器内实际可用的空间(不包括边框厚度,标题栏等等)。比如你要将一个...

...控件的长宽跟随窗口form的大小跟随改变大小的代码是怎么编写的?_百 ...
VB6.0中Form中有一个事件叫Resize()的事件,他相当于VB.NET中的SizeChange事件。依据窗体尺寸设置控件大小、位置,这就是分辨率思想。VB6.0例子:Private Sub Form1_ ReSize(){ Button1.Left=Int(Me.Width*0.1)'\/\/左边距窗体的10% Button1.Width=100 Button1.Top=Int(Me.Height*0.0...

相似回答