收录日期:2018/12/11 04:24:53 时间:2016/05/18 06:54:49 标签:VB基础类
窗体改变时,怎么让控件也随着窗体改变?
你看下面是我的一段代码,你自己读读,看能否帮助你

Private Sub Form_Resize()    ’当窗体变化时重新定义各控件的大小和位置
ChangeX = ParentForm.Width / YsParentFormWidth
ChangeY = ParentForm.Height / YsParentFormHeight
    '重新定义各控件的原始大小
           '公司图标

     ComForPicture.Width = YsComForPictureWidth * ChangeX

    YsComForPictureHeight = ComForPicture.Height * ChangeY

        '公司名

    ComForText.Width = YsComForTextWidth * ChangeX

    ComForText.Height = YsComForTextHeight * ChangeY

        '标签1

     Label1.Width = YsLabel1Width * ChangeX

    Label1.Height = YsLabel1Height * ChangeY

    Text1.Width = Ystext1Width * ChangeX

     Text1.Height = Ystext1Height * ChangeY

       '标签3

    Label3.Width = YsLabel3Width * ChangeX

    Label3.Height = YsLabel3Height * ChangeY

    Text3.Width = Ystext3Width * ChangeX

    Text3.Height = Ystext3Height * ChangeY

    '标签2

    Label2.Width = YsLabel2Width * ChangeX

    Label2.Height = YsLabel2Height * ChangeY

    Text2.Width = Ystext2Width * ChangeX

    Text2.Height = Ystext2Height * ChangeY

    '标签4

    Label4.Width = YsLabel4Width * ChangeX

    Label4.Height = YsLabel4Height * ChangeY

    Text4.Width = Ystext4Width * ChangeX

    Text4.Height = Ystext4Height * ChangeY

    '照片

      photoForPic.Width = YsphotoForPicWidth * ChangeX

    photoForPic.Height = YsphotoForPicHeight * ChangeY

    

ChangeLeft = ParentForm.Width / YsParentFormWidth

ChangeTop = ParentForm.Height / YsParentFormHeight

    '重新定义各控件的位置

         

        '公司图标

     ComForPicture.Left = YsComForPictureLeft * ChangeLeft

    YsComForPictureTop = ComForPicture.Top * ChangeTop

        '公司名

    ComForText.Left = YsComForTextLeft * ChangeLeft

    ComForText.Top = YsComForTextTop * ChangeTop

        '标签1

     Label1.Left = YsLabel1Left * ChangeLeft

    Label1.Top = YsLabel1Top * ChangeTop

    Text1.Left = Ystext1Left * ChangeLeft

     Text1.Top = Ystext1Top * ChangeTop

       '标签3

    Label3.Left = YsLabel3Left * ChangeLeft

    Label3.Top = YsLabel3Top * ChangeTop

    Text3.Left = Ystext3Left * ChangeLeft

    Text3.Top = Ystext3Top * ChangeTop

    '标签2

    Label2.Left = YsLabel2Left * ChangeLeft

    Label2.Top = YsLabel2Top * ChangeTop

    Text2.Left = Ystext2Left * ChangeLeft

    Text2.Top = Ystext2Top * ChangeTop

    '标签4

    Label4.Left = YsLabel4Left * ChangeLeft

    Label4.Top = YsLabel4Top * ChangeTop

    Text4.Left = Ystext4Left * ChangeLeft

    Text4.Top = Ystext4Top * ChangeTop

    '照片

    '标签4

    photoForPic.Left = YsphotoForPicLeft * ChangeLeft

    photoForPic.Top = YsphotoForPicTop * ChangeTop

 

End Sub
 
 
Top 
 
 回复人: xxlroad(土八路) ( ) 信誉:100  2001-12-31 12:43:25 得分:0  
 
 
 '******************************************************

'原作者:邓勇

'收集整理:小聪明 coolzm@sohu.com

'欢迎访问小聪明的主页VB版: http://coolzm.533.net

'******************************************************

'功能::窗体大小改变时窗体内的控件大小也随之动态改变

'使用方法:

'在相应的窗体程序中加入如下语句:

'---------------------------------------------------

'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


 
 
问题能否详细些??
有没有简单些的代码?
用几个frame来装载不同的窗体就好了啊
来使用不同的frame 就好
最简单的方式:下载一个控件:resize32.ocx,免费,放在窗体上即可!
这个问题很多人回答了.
这是我的一个模块,你COPY 下来保存就行
===================================
Option Explicit
Public Type CtrlPosition
    name As String
    x As Long
    y As Long
    width As Long
    height As Long
End Type

Public frm_ctrls() As CtrlPosition ''用来记录窗体上所有控件的坐标信息

Global FormOldWidth, FormOldHeight
Public HasInitForm As Boolean    ''判断是否已经记录过坐标信息

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

Public Sub ResizeForm(FormName As Form)  '''在 form_resize 事件中调用
 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

Public Function RecFormCtrls(ByVal FormName As Form, ByRef Form_ctrls() As CtrlPosition)              ''首先调用的函数,记录初始坐标
    Dim obj As Control, i As Integer
On Error Resume Next
    For Each obj In FormName
        'Debug.Print obj.Left
        'Debug.Print obj.name
        ReDim Preserve Form_ctrls(i + 1) As CtrlPosition
        Form_ctrls(i).name = obj.name
        Form_ctrls(i).x = obj.Left
        Form_ctrls(i).y = obj.Top
        Form_ctrls(i).width = obj.width
        Form_ctrls(i).height = obj.height
        
        i = i + 1
    Next

    For i = 0 To UBound(Form_ctrls)
        Debug.Print Form_ctrls(i).name
        Debug.Print Form_ctrls(i).x
    Next
End Function

Public Function InitFormCtrls(ByVal FormName As Form, ByRef Form_ctrls() As CtrlPosition)
    Dim obj As Control, i As Integer
On Error Resume Next
    For Each obj In FormName
        For i = 0 To UBound(Form_ctrls)
            If obj.name = Form_ctrls(i).name Then
                obj.Left = Form_ctrls(i).x
                obj.Top = Form_ctrls(i).y
                obj.width = Form_ctrls(i).width
                obj.height = Form_ctrls(i).height
                Exit For
            End If
        Next
    Next
    
    'MsgBox "ok"
End Function

'''仔细研究一下,稍微改改,就能用

the dynamic library that defines fork (200分悬赏)通过ALEXA官方所获得的网站排名信息来取得IP数 关于数组问题 帮忙来看下~xml问题~ 在asp.net三层结构项目中怎样处理异常,把这个异常信息提示用户? 同志们,你们都几点上下班呀. 在LINUX下怎样将数数据导入导出到MS excel中???? 求一个查询问题 怎么建不了临时表 哪位大师有TClientDataSet生成的CDS文件格式的资料? 大家好!我刚学ASP.NET2.0做了个访问计数器在本地运行还行可上传到服务器就不行了为什么?恳请指教 【飞鸟良】今年超女三强预测,看我说的准不准! ^_^^_^^_^^_^有想换工作的兄弟姐妹吗? 大容量的xml有200多M,用XmlDocument一Load就死机,郁闷,怎么取数据啊?? 这是啥问题???? 回龙观龙腾园小区找合租,up有分 OpenGL初学者,一些东西一知半解。附源代码问关于在OpenGL中显示字符的问题~~~ 客户端为何只能发送一次数据(SOCKET)???? 欢迎大家发言关于vb控制单片机 求一简单问题: 如何在html页面 打开时弹出一固定大小 的窗体 (调查)你每天睡几个小时?上下班坐车几小时? 求助:vb到vb.net转换的问题 在线等待中 一条SQL语句最长可以有多少个字符 我的float类型的字段sum出来会出现34.29999999之类的,该怎么办呢? 如何在注册表里修改显卡支持的刷新频率? 百分求助,这个谁会弄? 关于位运算的问题 vb中怎么能实现修改啊 OleDbCommand 查询 Access 数据库的 % 匹配问题 一个类似VISIO的绘图软件,可以卖多少钱,包括源代码一起出售