比如我在一个窗口上放了个文本框但如果我运行时拉动窗口调整大小的话文本框无法自动适应窗口大小,出现很大一块空白请问改如何解决???

解决方案 »

  1.   

    在csdn里搜索一下,有很多这样的问题...
      

  2.   

    知道,但是怎么写?? 难道没有其他语言GUI 的那种 布局控制 么??
      

  3.   

    Dim lWidth As Long, lHeight As LongPrivate Sub Form_Load()
        lWidth = Me.Width
        lHeight = Me.Height
    End SubPrivate Sub Form_Resize()
        If Me.WindowState <> 1 Then
            On Error Resume Next
            Text1.Width = Text1.Width + Me.Width - lWidth
            Text1.Height = Text1.Height + Me.Height - lHeight
            lWidth = Me.Width
            lHeight = Me.Height
        End If
    End Sub
      

  4.   

    解决方法:
    1、锁定窗口大小,这种方法最不可取,不过还是有很多人在用,甚至像一些知名大公司做的产品里都有这种情况。
    2、对每个控件写代码来控制布局,这是比较通常的做法。在容器改变大小时,调整容器内控件的大小和位置,代码量较大,不适合作复杂表单。
    3、做一些布局控件,如模仿Java里面的流式布局、边界布局及网格式布局等,让布局容器来控制控件位置及大小。组合使用布局控件可以设计出非常复杂的表单,而且几乎不用写什么代码。
      

  5.   

    就用 开心海大哥的
    resize好了
      

  6.   

    TO: happy_sea(开心海(数据读取中,请稍候......)) 一个空间,单单大小调整已经这样了,几个空间一起,还要包括未知调整,岂不乱套?!===============================================TO:fj182(阿花) 1、2 都不可取, 那么3呢?? 有现成的么??
      

  7.   

    第三方布局控件我没用过,是自己做的。我觉得用边界布局的方式比较实用,其原理为:把一个容器分为五部分,上下左右四个边界可以用控件来停靠,剩余的空间来放置第五个控件。其中上下左右的控件高度(上下边界控件的高度)和宽度(左右边界控件的宽度)都可以在设计时指定,扩展一下可以把高度和宽度分为两种情况:绝对值和相对值,绝对值就是使用固定高度或宽度;相对值就是指定一个跟容器高度或宽度的比例,容器大小变化时计算高度或宽度。如果不明白的话去看看Java的资料,里面有详细介绍边界布局。
      

  8.   

    给个链接,自己看吧。把这个东西做成VB的很简单。
    http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/awt/BorderLayout.html
      

  9.   

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

  10.   

    如果控件不多,resize事件是比较适合的
      

  11.   

    有个OCX可以做到这个的,好象叫Resize.ocx。用法很简单,就把这个OCX拖放到窗体就可以了。功能很强大,甚至连字体都会给你自动缩放。
      

  12.   

    TO: 开心海偶认为这种按比例缩放控件,还不如锁定窗口大小来的美观……=================================================
    TO: fj182(阿花) 就是这类布局控制,我用过 Java、 Python 的 GUI 为什么单单 VB 没有这个?? 这么实用的东西……