真正做一个东西才发现自己的知识太少了!问一个问题:如何做使运行后的主窗口能适应放大和缩小,比如最大化的时候!可是我现在的情况是最大化是窗口内的内容不变大,不协调!窗口里放了几个按钮还有几个DATAGRID!

解决方案 »

  1.   


    在调用ResizeForm前先 保存窗体的宽高度求窗体宽高度缩放比例
    按比例改变表单内各元件的大小
      

  2.   

    可以在窗体的Form_Resize事件中写入控件的放大比例
      

  3.   

    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 SubPrivate Sub Form_Load()
      Call ResizeInit(Me)  '在程序装入时必须加入
    End SubPrivate Sub Form_Resize()
      Call ResizeForm(Me)  '确保窗体改变时控件随之改变
    End Sub
      

  4.   

    在Form_Resize事件中为需要适应窗体大小的控件Me.Object.Move Left, Top, Width, Height
      

  5.   

    '新建一个工程,放一个commandButton和一个TextBox,再贴上下面代码,看一看就明白了。
    Private Sub Command1_Click()
        End
    End SubPrivate Sub Form_Load()
        Command1.Caption = "Exit"
        Command1.Height = 300: Command1.Width = 600
        Command1.Top = 120
        Text1.Top = 600
        Text1.Left = 0
    End SubPrivate Sub Form_Resize()
        On Error Resume Next
        Command1.Left = Me.ScaleWidth - 1000
        Text1.Width = Me.ScaleWidth
        Text1.Height = Me.ScaleHeight - Text1.Top
    End Sub
      

  6.   

    自动改变控件大小当 窗 体 大 小 改 变 时, 如 何 动 态 的 改 变 控 件 的 大 小 是 许 多VB 
    程 序 员 头 痛 的 事。 有 的 人 设 置 窗 体Resizable 但 却 不 改 变 控 
    件 的 大 小; 有 的 人 则 根 据 控 件 的 绝 对 位 置 与 窗 口 大 小 相 
    加 减 的 办 法 来 重 新 定 位 控 件 与 改 变 大 小, 这 种 办 法 比 较 
    繁 琐, 且 不 可 重 用; 当 然 也 有 人 则 限 定 窗 口 干 脆 不 让 改 变。
    有 没 有 一 种 简 便 易 行 的 办 法 ? 答 案 是 肯 定 的, 下 面 给 出 
    一 个 一 劳 永 逸 的 办 法, 源 程 序 如 下: 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 Private Sub Form_Load() Call ResizeInit(Me) '在程序装入时必须加入 End Sub Private Sub Form_Resize() Call ResizeForm(Me) '确保窗体改变时控件随之改变 End Sub 本 例 中 给 出 了 二 个 函 数:ResizeInit 和ResizeForm, 在 调 用
    ResizeForm 之 前 必 须 先 调 用ResizeInit。 你 可 以 将 本 程 序 拷 到 
    窗 体 代 码 段 里, 然 后 在 窗 体 里 加 入 任 意 控 件 即 可 进 行 测 
    试。 
      

  7.   

    : lhg_800105(孤星) : yoki(小马哥--鬓微霜,又何妨) 
    一样 是对的
      

  8.   

    在调用ResizeForm前先 保存窗体的宽高度求窗体宽高度缩放比例
    按比例改变表单内各元件的大小
      

  9.   

    在窗口的Resize事件里写调整各个控件大小及位置的代码!
      

  10.   

    按照yoki(小马哥--鬓微霜,又何妨) 给的代码我试了,发现执行其中某些功能的时候会出错!不加的时候运行正常!
      

  11.   

    还有一个小问题:就是在FORM上摆放各个控件,运行的时候把它最大化之后,出先的结果跟在设计时侯的布局不一样!我在FORM上放了几个按钮,两个COMBOBOX,两个TEXTBOX!运行之后最大化的结果很难看,按钮跟COMBOBOX有的重在一起!如何解决这个问题?多些大家的帮忙!
      

  12.   

    这种情况下用代码来控制整个窗体的控件比较麻烦(当控件数量很多时) 
    最好的方法在vb编辑环境下最大化窗体,手工摆放好各个控件,再记录每个控件的位置,然后在Resize事件中再设置各个控件的位置
    ^O^
      

  13.   

    我是非常不愿意写窗口缩放的!一般,如无必要.我写的东东的最大化都是不可用...
    写缩放,最好先把一些相关的控件放到Frmae里.窗口是缩放Frmae,而各个Frame里的控件也各自对自己所在的框架里的变化作相应的调整!
    如果控件很多,一次调整整个Form里的东东就够你忙了!
      

  14.   

    我一般是把控件放在frame里进行分组,需要调整时就重新分布各组控件的位置就行了,因为象按钮等控件一般没必要改变大小,只需要调整位置就行了。