Вот быстрый пользовательский компонент, который наследует Label, который будет делать это:
Partial Class MyLabel
Inherits System.Windows.Forms.Label
Private _fWidth As Integer
Private _fHeight As Integer
Private _fSize As Single
Private _fFix As Boolean = False
Public Property Fix() As Boolean
Get
Return _fFix
End Get
Set(ByVal value As Boolean)
_fFix = value
If _fFix Then
_fWidth = Me.Width
_fHeight = Me.Height
_fSize = Me.Font.Size
End If
End Set
End Property
Protected Overrides Sub OnResize(ByVal e As System.EventArgs)
MyBase.OnResize(e)
If _fFix Then
Dim nStyle As FontStyle = FontStyle.Regular _
+ CInt(Me.Font.Bold) * FontStyle.Bold _
+ CInt(Me.Font.Italic) * FontStyle.Italic _
+ CInt(Me.Font.Underline) * FontStyle.Underline _
+ CInt(Me.Font.Strikeout) * FontStyle.Strikeout
Dim nFont As New Font(Me.Font.FontFamily, _
_fSize * Me.Width / _fWidth, _
nStyle, GraphicsUnit.Point)
Me.Font = nFont
Me.Height = _fHeight * (Me.Width / _fWidth)
End If
End Sub
End Class
Чтобы сделать это, вам нужно установить AutoSize = False
и новое свойство Fix = true
.Затем, когда размер метки будет изменен, шрифт будет соответствующим образом масштабирован.Это очень быстрая реализация.Очевидно, есть много мест, где можно расширить это, чтобы сделать его более умным, но, надеюсь, это должно дать вам начало и некоторые идеи.