12-08-14, 10:48 AM
ما قلت لك سابقا في كلتا الحالات ما تريده يتحقق فقط في حالة واحدة و هي أن تحسب حجم التكست باستخدام TextRenderer و تبين كونترول تم توريثه من التكست بوكس بيتناسب مع ما تريده
ثم تقوم بعمل Zooming للفونت بمعني انك تحسب مقاس التكست ثم تقسمه أو تضربه في Scale ما لتجعله اصغر قليلا أو تجعله أكبر قليلا و من ثم تقارنه ب عرض التكست بوكس فإن كان اقل أو أكبر تضبطه برمحيا ليتناسب مع أبعاد التكست بوكس و في تلك الحالة أنت لن تحتاج الي تغيير ابعاد التكست بوكس
لكن هناك مشكلة وحيدة هنا وهي أن Font Size في التكست بوكس تقريبا Read Only
عموما مرحليا فيه خاصية اسمها AutoSize لو جعلت قيمتها تساوي True ستحقق لك ما تريده لكنها غالبا ستغير في ابعاد التكست بوكس.
أيضا يمكنك دراسة الكود التالي و التعديل عليه ربما يتناسب مع ما تريد انا كتبته لكي يعطيك فكرة بسيطة عن كيفية التلاعب بحجم الفونت لكنك
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Me.TextBox1.Text = "The Lazy Fox Jumps on the Streets"
End Sub
Public Shared Function ScaleTextBoxFontSize(textBoxSize As Size, textBoxFont As Font, textBoxString As String) As Single
Dim textSize As SizeF = TextRenderer.MeasureText(TextBoxString, textBoxFont)
Return textBoxFont.Size * Math.Min(textBoxSize.Height / textSize.Height, textBoxSize.Width / textSize.Width)
End Function
Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
If Not String.IsNullOrEmpty(TextBox1.Text) Then
Dim originalFontSize As Single = Me.TextBox1.Font.Size
Dim scale As Single = ScaleTextBoxFontSize(Me.TextBox1.Size, Me.TextBox1.Font, Me.TextBox1.Text)
Me.TextBox1.Font = New Font(Me.TextBox1.Font.FontFamily, originalFontSize * scale / 10)
End If
End Sub
End Class
ثم تقوم بعمل Zooming للفونت بمعني انك تحسب مقاس التكست ثم تقسمه أو تضربه في Scale ما لتجعله اصغر قليلا أو تجعله أكبر قليلا و من ثم تقارنه ب عرض التكست بوكس فإن كان اقل أو أكبر تضبطه برمحيا ليتناسب مع أبعاد التكست بوكس و في تلك الحالة أنت لن تحتاج الي تغيير ابعاد التكست بوكس
لكن هناك مشكلة وحيدة هنا وهي أن Font Size في التكست بوكس تقريبا Read Only
عموما مرحليا فيه خاصية اسمها AutoSize لو جعلت قيمتها تساوي True ستحقق لك ما تريده لكنها غالبا ستغير في ابعاد التكست بوكس.
أيضا يمكنك دراسة الكود التالي و التعديل عليه ربما يتناسب مع ما تريد انا كتبته لكي يعطيك فكرة بسيطة عن كيفية التلاعب بحجم الفونت لكنك
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Me.TextBox1.Text = "The Lazy Fox Jumps on the Streets"
End Sub
Public Shared Function ScaleTextBoxFontSize(textBoxSize As Size, textBoxFont As Font, textBoxString As String) As Single
Dim textSize As SizeF = TextRenderer.MeasureText(TextBoxString, textBoxFont)
Return textBoxFont.Size * Math.Min(textBoxSize.Height / textSize.Height, textBoxSize.Width / textSize.Width)
End Function
Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
If Not String.IsNullOrEmpty(TextBox1.Text) Then
Dim originalFontSize As Single = Me.TextBox1.Font.Size
Dim scale As Single = ScaleTextBoxFontSize(Me.TextBox1.Size, Me.TextBox1.Font, Me.TextBox1.Text)
Me.TextBox1.Font = New Font(Me.TextBox1.Font.FontFamily, originalFontSize * scale / 10)
End If
End Sub
End Class

