شكراً أخي العزيز nmst70
لكن للأسف لم يكن هذا ما أردته وإنما العكس تماماً أريد ضغط حجم النص ليتناسب مع حجم مربع النص وليس العكس
جزاك الله خيراً على أية حال
السلام عليكم ورحمة الله وبركاته
تفضل أخي هذا الكود في حال كان النص سطرا واحدا
كود :
Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
If TextBox1.PreferredSize.Width > TextBox1.Width Then
Dim FontSize As Single = TextBox1.Font.Size
Dim NewWidth As Integer = 0
Do
With TextBox1
FontSize -= 0.001F
NewWidth = TextRenderer.MeasureText(.Text, New Font(.Font.Name, FontSize, Font.Style)).Width
If NewWidth <= .Width Then
.Font = New Font(.Font.Name, FontSize, Font.Style)
Exit Do
End If
End With
Loop
End If
End Sub
وعليه فقِس في الحالة الثانية...
بالتوفيق
المشكلة هنا ليست في عمل Scale للفونت المشكلة ان الفونت يصغر كلما قام المستخدم ب الكتابة ف التكست بوكس.
ما أريد أن أقوله هنا هو أننا نقوم ب حل مشكلة و نصنع مشكلة أخري ......
للأسف التكست بوكس ليس به خاصية تحدد هل انتهي المستخدم من الكتابة ام لا ........و عندما نقوم ب نتغيير حجم الفونت أثناء الكتابة ستكون النتيجة الحتمية هي أن المستخدم قد لا يري ما يكتبه بوضوح لأن الفونت يقل حجمه كلما استمر المستخدم في الكتابة
أعتقد و الله أعلم إن الحل الأفضل هو أن نترك المستخدم يكتب ما يريده ب الفونت العادي....ثم نحاول أن نكتشف هل انتهي من الكتابة أم لا ثم بعد ذلك نقوم ب تغيير حجم الفونت ليتناسب To Fit في التكست بوكس لذلك و كما قلت سابقا نحن في حاجة الي صناعة كونترول جديد يتم توريثه من التكست بوكس و نغير في خصائصه عن طريق رسم التكست في الحدث Paint ليتناسب مع ما تريد
لكن انا عندي سؤال ما هدفك الأصلي من تحجيم الفونت في التكست بوكس ..ربما لو قمت بتوضيح هدفك من ذلك قد نجد حلا اسهل ليتناسب مع ما تريده
سأخبرك بذلك أخي silverlight
السلام عليكم
أخواني الأعزاء أخيراً وبفضل الله تعالى وجدت الحل لضغط حجم النص تلقائياً في مربع النص وذلك بتعديل حجم الخط
كود :
Dim fontSize As Single = 12.0F
Dim measuredWidth As Single
Dim g As Graphics = Me.CreateGraphics
Do
Using font As New Font("Tahoma", fontSize, FontStyle.Bold)
measuredWidth = g.MeasureString(TextBox1.Text, font).Width
End Using
If (measuredWidth > TextBox1.Width) Then
fontSize = fontSize - 0.1
End If
Loop While (measuredWidth > TextBox1.Width)
Using font As New Font("Tahoma", fontSize, FontStyle.Bold)
TextBox1.Font = New Font("Tahoma", fontSize, FontStyle.Bold)
End Using
تقبلوا جميعاً تحياتي