说实话,本人在工作和学习中,从网络中受益匪浅,所谓饮水思源。所以我也想把自己的一些心得,放到网上,让有需要的朋友去获取,这也是一件开心的事情。今天算是第一步吧。 辉歌 2008.11.18 11:39
Public Class Class_Form_Control_AutoSize
' 2008-1118-1124 .net 2005 vb 彻底解决控件随窗体变化而自动按比例调整的类
Private FormOldWidth As Long
'保存窗体的原始宽度
Private FormOldHeight As Long
'保存窗体的原始高度
Dim Decimal_Rate_X As System.Decimal
Dim Decimal_Rate_Y As System.Decimal
'在调用ResizeForm前先调用本函数
Public Sub ResizeInit(ByRef FormName As System.Windows.Forms.Form)
FormOldWidth = FormName.Width
FormOldHeight = FormName.Height 'ScaleHeight
End Sub
'按比例改变表单内各元件的大小, 在调用ReSizeForm前先调用ReSizeInit函数
Public Sub ResizeForm(ByRef FormName As Form)
Decimal_Rate_X = FormName.Width / FormOldWidth
Decimal_Rate_Y = FormName.Height / FormOldHeight
Me.DoResize_EachOne(FormName)
End Sub
Private Sub DoResize_EachOne(ByVal Control_Father As Control)
Dim Control_0 As Control
For Each Control_0 In Control_Father.Controls
Dim Control_Old_Width As System.Int64
Dim Control_Old_height As System.Int64
Dim Point_Old As System.Drawing.Point
Dim Point_New As System.Drawing.Point
Control_Old_Width = Control_0.Width
Control_Old_height = Control_0.Height
Point_Old = Control_0.Location
Point_New.X = Int(Point_Old.X * Decimal_Rate_X)
Point_New.Y = Int(Point_Old.Y * Decimal_Rate_Y)
Control_0.Location = Point_New
Control_0.Width = Int(Control_Old_Width * Decimal_Rate_X)
Control_0.Height = Int(Control_Old_height * Decimal_Rate_Y)
If Control_0.Controls.Count > 0 Then
Me.DoResize_EachOne(Control_0)
End If
Next
End Sub
End Class
' 调用实例
Public Class Form1
Dim Class_Object_AutoSize_0 As New Class_Form_Control_AutoSize
Private Sub Form1_ResizeBegin(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.ResizeBegin
Me.Class_Object_AutoSize_0.ResizeInit(Me)
End Sub
Private Sub Form1_ResizeEnd(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.ResizeEnd
Me.Class_Object_AutoSize_0.ResizeForm(Me)
End Sub
End Class