我知道有一个form_resize()事件,可以实现这种效果,,
但是搞了半天,还是没有搞定...
望高手给个提示呀....
谢了先...
如能给一段小的代码那就更好呀...

解决方案 »

  1.   


    Private Sub Form_Resize()
     
     Me.Text1.Width = Me.Width / 2
     Me.Text1.Height = Me.Height / 2
     Me.Text1.Left = (Me.Width - Me.Text1.Width) / 2
     Me.Text1.Top = (Me.Height - Me.Text1.Height) / 2
     
     
    End Sub
      

  2.   

    http://community.csdn.net/Expert/topic/4508/4508722.xml?temp=.6603357
      

  3.   

    谢谢楼上的....
    但是..在这个form上有好多的控件...
    都需要这样设置吗?
    大家平时在做开发的时候是怎么做到的呀....
      

  4.   

    给你一个好例子:http://www.mndsoft.com/blog/blogview.asp?logID=147&cateID=3
      

  5.   

    别老想自动控件
    等比缩放效果并不好,而且不适合所有情况
    在ReSize事件中自己计算控件的坐标的效果最好注意:
    计算坐标的时候应该使用容器的ScaleWidth、ScaleHeight属性
    Width、Height属性是算上窗口外框的大小,对于Form只能是Twip
    ScaleWidth、ScaleHeight属性是客户区(能摆放控件的区域,不包括标题栏、菜单栏、边框、滚动条等)的大小
    为什么要在ReSzie事件中改变大小
    这是为了能让用户可以在运行时改变窗口大小
    而“运行时改变窗口大小”的功能是窗口的基本功能
    如果你的程序无法做到这一点
    就给人一种不专业的感觉(至少我将绝不用那样的软件)
    所以一定要锻炼在ReSzie事件中调整控件坐标的能力
    对于控件之间有间隙
    可以先定义一个常数来说明控件之间的标准间隙大小
    然后在计算控件坐标的时候也算上该常数
    只是数学运算稍微麻烦了一点而已其实一般的界面都是分成几块的
    如资源管理器分为上面的工具栏区域(ReBar控制项)和下面的TreeView、ListView区域
    它在处理ReSzie事件时只需修改ReBar控制项的宽度以及下面的TreeView、ListView控制项的位置
    由于ReBar控制项会自动修改其中的工具栏的位置,于是程序员不需要操心从上面那个例子可看出
    由于一般的界面都是分成几块区域的
    只有区域本身需要修改位置
    区域中的控件大多不需要修改位置
    所以其实在窗口中真正需要手动算坐标的其实很少可以在VB中利用这种思想
    可将控件放入不同的PictureBox中
    特别是PictureBox有Align属性
    可以进一步的减少代码量假若PictureBox中的控件需要定位
    则应在PictureBox的ReSize事件中定位控件(注意此时别在Form的ReSize事件定位,那是人为制造难度)
    区域大小也应根据PictureBox的ScaleHeight、ScaleWidth属性
    此时With语句的作用就很重要了(如在“With PicLeft”块中写定位代码)
    注意这时为了减少PictureBox所占资源
    应将其AutoRedraw、HasDC属性都设为False
      

  6.   

    加入这段代码就可以了'*****************************************************************
    '
    '               控件随窗体大小改变而改变
    '
    '*****************************************************************Private Sub Form_Resize()
      Dim H, i As Integer
      On Error Resume Next
      Resize_ALL frmmain 'Me是窗体名,Form1,Form2等等都可以End SubFunction ActualPos(plLeft As Long) As Long  If plLeft < 0 Then
        ActualPos = plLeft + 75000
      Else
        ActualPos = plLeft
      End IfEnd FunctionFunction FindForm(pfrmIn As Form) As Long  Dim i As Long
      FindForm = -1  If MaxForm > 0 Then
     
        For i = 0 To (MaxForm - 1)
          If FormRecord(i).Name = pfrmIn.Name Then
            FindForm = i
            Exit Function
          End If
        Next i
      End IfEnd Function
    Function AddForm(pfrmIn As Form) As Long  Dim FormControl As Control
      Dim i As Long
      ReDim Preserve FormRecord(MaxForm + 1)  FormRecord(MaxForm).Name = pfrmIn.Name
      FormRecord(MaxForm).Top = pfrmIn.Top
      FormRecord(MaxForm).Left = pfrmIn.Left
      FormRecord(MaxForm).Height = pfrmIn.Height
      FormRecord(MaxForm).Width = pfrmIn.Width
      FormRecord(MaxForm).ScaleHeight = pfrmIn.ScaleHeight
      FormRecord(MaxForm).ScaleWidth = pfrmIn.ScaleWidth
      AddForm = MaxForm
      MaxForm = MaxForm + 1  For Each FormControl In pfrmIn
        i = FindControl(FormControl, pfrmIn.Name)
        If i < 0 Then
          i = AddControl(FormControl, pfrmIn.Name)
        End If
      Next FormControlEnd Function
      

  7.   

    Function FindControl(inControl As Control, inName As String) As Long  Dim i As Long
      FindControl = -1  For i = 0 To (MaxControl - 1)
        If ControlRecord(i).Parrent = inName Then
          If ControlRecord(i).Name = inControl.Name Then
            On Error Resume Next
            If ControlRecord(i).Index = inControl.Index Then
              FindControl = i
              Exit Function
            End If
            On Error GoTo 0
          End If
        End If
      Next i
    End FunctionFunction AddControl(inControl As Control, inName As String) As Long  ReDim Preserve ControlRecord(MaxControl + 1)
      On Error Resume Next
      ControlRecord(MaxControl).Name = inControl.Name
      ControlRecord(MaxControl).Index = inControl.Index
      ControlRecord(MaxControl).Parrent = inName  If TypeOf inControl Is Line Then
        ControlRecord(MaxControl).Top = inControl.Y1
        ControlRecord(MaxControl).Left = ActualPos(inControl.X1)
        ControlRecord(MaxControl).Height = inControl.Y2
        ControlRecord(MaxControl).Width = ActualPos(inControl.X2)
      Else
        ControlRecord(MaxControl).Top = inControl.Top
        ControlRecord(MaxControl).Left = ActualPos(inControl.Left)
        ControlRecord(MaxControl).Height = inControl.Height
        ControlRecord(MaxControl).Width = inControl.Width
      End If  inControl.IntegralHeight = False
      On Error GoTo 0
      AddControl = MaxControl
      MaxControl = MaxControl + 1
    End FunctionFunction PerWidth(pfrmIn As Form) As Long  Dim i As Long
      i = FindForm(pfrmIn)  If i < 0 Then
        i = AddForm(pfrmIn)
      End If  PerWidth = (pfrmIn.ScaleWidth * 100) \ FormRecord(i).ScaleWidth
    End FunctionFunction PerHeight(pfrmIn As Form) As Double  Dim i As Long
      i = FindForm(pfrmIn)  If i < 0 Then
        i = AddForm(pfrmIn)
      End If  PerHeight = (pfrmIn.ScaleHeight * 100) \ FormRecord(i).ScaleHeight
    End FunctionPublic Sub ResizeControl(inControl As Control, pfrmIn As Form)  On Error Resume Next
      Dim i As Long
      Dim widthfactor As Single, heightfactor As Single
      Dim minFactor As Single
      Dim yRatio, xRatio, lTop, lLeft, lWidth, lHeight As Long
      yRatio = PerHeight(pfrmIn)
      xRatio = PerWidth(pfrmIn)
      i = FindControl(inControl, pfrmIn.Name)  If inControl.Left < 0 Then
        lLeft = CLng(((ControlRecord(i).Left * xRatio) \ 100) - 75000)
      Else
        lLeft = CLng((ControlRecord(i).Left * xRatio) \ 100)
      End If  lTop = CLng((ControlRecord(i).Top * yRatio) \ 100)
      lWidth = CLng((ControlRecord(i).Width * xRatio) \ 100)
      lHeight = CLng((ControlRecord(i).Height * yRatio) \ 100)
      If TypeOf inControl Is Line Then    If inControl.X1 < 0 Then
          inControl.X1 = CLng(((ControlRecord(i).Left * xRatio) \ 100) - 75000)
        Else
          inControl.X1 = CLng((ControlRecord(i).Left * xRatio) \ 100)
        End If    inControl.Y1 = CLng((ControlRecord(i).Top * yRatio) \ 100)
        If inControl.X2 < 0 Then
          inControl.X2 = CLng(((ControlRecord(i).Width * xRatio) \ 100) - 75000)
        Else
          inControl.X2 = CLng((ControlRecord(i).Width * xRatio) \ 100)
        End If    inControl.Y2 = CLng((ControlRecord(i).Height * yRatio) \ 100)
      Else
        inControl.Move lLeft, lTop, lWidth, lHeight
        inControl.Move lLeft, lTop, lWidth
        inControl.Move lLeft, lTop
      End IfEnd SubPublic Sub ResizeForm(pfrmIn As Form)  Dim FormControl As Control
      Dim isVisible As Boolean
      Dim StartX, StartY, MaxX, MaxY As Long
      Dim bNew As Boolean  If Not bRunning Then
        bRunning = True    If FindForm(pfrmIn) < 0 Then
          bNew = True
        Else
          bNew = False
        End If
        If pfrmIn.Top < 30000 Then
          isVisible = pfrmIn.Visible
          On Error Resume Next
          If Not pfrmIn.MDIChild Then
            On Error GoTo 0
            ' ' pfrmIn.Visible = False
          Else        If bNew Then
              StartY = pfrmIn.Height
              StartX = pfrmIn.Width
              On Error Resume Next
              For Each FormControl In pfrmIn
                If FormControl.Left + FormControl.Width + 200 > MaxX Then
                  MaxX = FormControl.Left + FormControl.Width + 200
                End If            If FormControl.Top + FormControl.Height + 500 > MaxY Then
                  MaxY = FormControl.Top + FormControl.Height + 500
                End If            If FormControl.X1 + 200 > MaxX Then
                  MaxX = FormControl.X1 + 200
                End If            If FormControl.Y1 + 500 > MaxY Then
                  MaxY = FormControl.Y1 + 500
                End If            If FormControl.X2 + 200 > MaxX Then
                  MaxX = FormControl.X2 + 200
                End If            If FormControl.Y2 + 500 > MaxY Then
                  MaxY = FormControl.Y2 + 500
                End If          Next FormControl          On Error GoTo 0
              pfrmIn.Height = MaxY
              pfrmIn.Width = MaxX
            End If        On Error GoTo 0
          End If      For Each FormControl In pfrmIn
            ResizeControl FormControl, pfrmIn
          Next FormControl      On Error Resume Next      If Not pfrmIn.MDIChild Then
            On Error GoTo 0
            pfrmIn.Visible = isVisible
          Else        If bNew Then
            pfrmIn.Height = StartY
            pfrmIn.Width = StartX        For Each FormControl In pfrmIn
              ResizeControl FormControl, pfrmIn
            Next FormControl      End If
        End If
        On Error GoTo 0
      End If
      bRunning = False
    End IfEnd SubPublic Sub SaveFormPosition(pfrmIn As Form)  Dim i As Long  If MaxForm > 0 Then    For i = 0 To (MaxForm - 1)      If FormRecord(i).Name = pfrmIn.Name Then        FormRecord(i).Top = pfrmIn.Top
            FormRecord(i).Left = pfrmIn.Left
            FormRecord(i).Height = pfrmIn.Height
            FormRecord(i).Width = pfrmIn.Width
            Exit Sub
          End If
        Next i    AddForm (pfrmIn)
      End If
    End SubPublic Sub RestoreFormPosition(pfrmIn As Form)  Dim i As Long
      If MaxForm > 0 Then
        For i = 0 To (MaxForm - 1)
          If FormRecord(i).Name = pfrmIn.Name Then
            If FormRecord(i).Top < 0 Then
              pfrmIn.WindowState = 2
            ElseIf FormRecord(i).Top < 30000 Then
              pfrmIn.WindowState = 0
              pfrmIn.Move FormRecord(i).Left, FormRecord(i).Top, FormRecord(i).Width, FormRecord(i).Height
            Else
              pfrmIn.WindowState = 1
            End If
              Exit Sub
          End If
        Next i
      End If
    End SubPublic Sub Resize_ALL(Form_Name As Form)  Dim OBJ As Object
      For Each OBJ In Form_Name
        ResizeControl OBJ, Form_Name
      Next OBJ
    End SubPublic Sub DragForm(frm As Form)  On Local Error Resume Next
      Call ReleaseCapture
      Call SendMessage(frm.hwnd, WM_NCLBUTTONDOWN, 2, 0)End Sub
      

  8.   

    Private Sub Form_Resize()
    '重新分配控件的大小End Sub
      

  9.   

    支持楼上所说的,不要那么麻烦,只要在FROM窗口的RESIZE===rivate Sub Form_Resize()中写一段少少的代码就可以了。
    例如,你要使用text1和From1窗口的大小相同
    在Resize事件中插入代码
    Private Sub Form_Resize()
    text1.width = form1.width   '设置文本框的宽度与窗口相同
    text1.hight = form1.hight   '设置文本框的高度相同
    如果你觉的太大了,你可以在后面减掉一些,他的单位是 “缇”
    例如:
    text1.width = form1.width -1000