控件按比例随窗体缩放

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值