当前位置:编程学习 > VB >>

请教 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)的属性.

谢谢各位高手了  --------------------编程问答-------------------- 你把:
Obj.Move Pos(0) * ScaleX, Pos(1) * ScaleY, Pos(2) * ScaleX, Pos(3) * ScaleY
改成:
Obj.Move Pos(0) * ScaleX, Pos(1) * ScaleY

就不会改变大小了啊!

控件大小不变,那字体大小也不能变,把下一句也取消。



这样应该可以吧?
--------------------编程问答-------------------- 一样的不行啊~~~把后面的删掉之后~~控件的大小是没有变~~不过好像他的比例不是最初设计时的比例啊~~~位置还是有很大出入的,窗口放得越大,差距就越大~~~他的Left和Top是与控件变化大小后一样的~~这样的话控件没有变大,他的Left和Top与放大后的一样的话,位置有偏差的~~~ --------------------编程问答-------------------- TreeView1.Width = Me.Width - 370
TreeView1.Height = Me.Height - 1400
Command1.Top = TreeView1.Height + TreeView1.Top + (Me.Height - TreeView1.Height - TreeView1.Top) / 2 - Command1.Height
Command2.Top = Command1.Top
Command3.Top = Command1.Top
Command4.Top = Command1.Top
Command1.Left = Me.Width / 2 - 750 - Command2.Width * 2
Command2.Left = Command1.Left + Command1.Width + 300
Command4.Left = Command2.Left + Command2.Width + 300
Command3.Left = Command4.Left + Command4.Width + 300


这个是忽忽浏览器中一个窗体根据treeview控件大小自动分布4个command控件位置的代码,不知道对你是否有用。 --------------------编程问答-------------------- 都不行的~~~晕倒~~~~我郁闷死了~~~哎
补充:VB ,  非技术类
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,