怎么样使Winfom上的控件,随窗体的大小来按比例改变大小?

解决方案 »

  1.   

    将控件放在panel里,并设置控件和panel的dock属性
      

  2.   

    窗体改变会触发Resize事件....在事件里面控制你要控制的控件的大小我也是用这种办法...可以参考一下              this.treeView1.Height = this.panel1.Height - 92;
                
      

  3.   


    Public Class Form1    Dim x As Single = 0
        Dim y As Single = 0
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            '得到原始窗体大小
            x = Me.Width
            y = Me.Height
            setTag(Me)
        End Sub    Private Sub Form1_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Resize
            '得到现在窗体的大小,然后根据原始大小计算缩放比例
            Dim newx As Single = Me.Width / x
            Dim newy As Single = Me.Height / y
            setControls(newx, newy, Me)
        End Sub
        '递归取控件的原始大小和位置,用tag来纪录
        Private Sub setTag(ByVal obj As Object)
            For Each con As Control In obj.Controls
                con.Tag = con.Width & ":" & con.Height & ":" & con.Left & ":" & con.Top & ":" & con.Font.Size
                '如果是容器控件,则递归继续纪录
                If con.Controls.Count > 0 Then
                    setTag(con)
                End If
            Next
        End Sub
        '递归重新设定控件的大小和位置
        Private Sub setControls(ByVal newx As Single, ByVal newy As Single, ByVal obj As Object)
            For Each con As Control In obj.Controls
                con.AutoSize = False
                Dim mytag() As String = con.Tag.ToString.Split(":")
                con.Width = mytag(0) * newx
                con.Height = mytag(1) * newy
                con.Left = mytag(2) * newx
                con.Top = mytag(3) * newy
                '计算字体缩放比例,缩放字体
                Dim currentSize As Single = newy * mytag(4)
                con.Font = New Font(con.Font.Name, currentSize, _
                    con.Font.Style, con.Font.Unit)
                '如果是容器控件,则递归继续缩放
                If con.Controls.Count > 0 Then
                    setControls(newx, newy, con)
                End If
            Next
        End Sub
    End Class非原創,原創請參考http://blog.csdn.net/loveme1204/archive/2007/12/24/1964577.aspx
    另附C#和VB.Net代碼轉換網站:http://labs.developerfusion.co.uk/convert/csharp-to-vb.aspx