控件按比例随窗体缩放

来源:互联网 发布:高级java工程师充电班 编辑:程序博客网 时间:2024/04/30 03:03
 
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 ObjectByVal 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 SingleByVal newy As SingleByVal 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
原创粉丝点击