تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
كود لعمل تحجيم تلقائي -AutoSize- لأداة مربع النص TextBox
#1
بسم الله الرحمن الرحيم

الحمد لله رب العالمين والصلاة والسلام على سيدنا محمد وعلى آله وصحبه أجمعين
وبعد


السلام عليكم ورحمة الله وبركاته


قد يحتاج المبرمج في بعض الأحيان إلى وضع أداة نص (TextBox) في مشروعه تكون ذات تحجيم تلقائي (AutoSize) بمعنى أنها تتمدد وتتقلص بحسب النص الذي قام المستخدم بكتابته فيها ...

فكيف السبيل إلى عمل ذلك ؟
في البداية هناك ثلاث حالات:

الحالة الأولى/ عندما تكون خاصية تعدد الأسطر غير مفعلة (Multiline=False)
في هذه الحالة الأمر سهل فكل ما عليك هو وضع هذا الكود فقط

كود :
Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
        TextBox1.Width = TextBox1.PreferredSize.Width + [color=#FF0000]5[/color]
    End Sub
ملاحظة: الرقم خمسة هو لحساب مساحة مؤشر الوميض لأداة النص


الحالة الثانية/ عندما تكون خاصية تعدد الأسطر مفعلة (Multiline=True) ولكن خاصية الالتفاف غير مفعلة (WordWrap=False)
ستختلف هذه الحالة عن سابقتها بأن ارتفاع الأداة أيضا سيختلف عندما يتم الضغط على زر الرجوع (Enter) وبالتالي سيتم تعديل الكود ليصبح بالشكل التالي

كود :
Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
        TextBox1.Width = TextBox1.PreferredSize.Width + 5
        TextBox1.Height = TextBox1.PreferredSize.Height
    End Sub

الحالة الثالثة/ عندما تكون خاصية تعدد الأسطر مفعلة (Multiline=True) وخاصية الالتفاف أيضا مفعلة (WordWrap=True)
هنا سنواجه مشكلة أنه لا يتم احتساب ارتفاع النص الملتف تلقائيا وعلينا احتسابه بأنفسنا ثم إضافة القيمة النهائية إلى الارتفاع
ومن خلال البحث وجدت عدة طرق منها على سبيل المثال (MeasureString, MeasureText)
ولكني سلكت طريقا آخر وجدته - من وجهة نظري - أنه الأسهل
هذه الطريقة هي بالاعتماد على خاصية التحجيم التلقائي لأداة التسمية (Label)
وهذا الكود يبين الطريقة

كود :
Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
        TextBoxResizer(TextBox1)
    End Sub
    Public Sub TextBoxResizer(ByVal TextControl As System.Windows.Forms.TextBox)
        Dim Label1 As New System.Windows.Forms.Label
        Label1.Text = "Label1"
        Label1.MaximumSize = New System.Drawing.Size(TextControl.Width - 5, 0)
        Label1.MinimumSize = New System.Drawing.Size(TextControl.Width - 5, 0)
        Label1.Font = TextControl.Font
        Label1.Size = Label1.PreferredSize
        Dim DefaultHeight As Integer = Label1.Height
        Label1.Text = TextControl.Text
        Label1.Size = Label1.PreferredSize

        TextControl.Height = TextControl.PreferredHeight + (Label1.Height / DefaultHeight - 1) * DefaultHeight
        If TextControl.Text.EndsWith(vbNewLine) Then TextControl.Height += DefaultHeight
    End Sub

وأخيرا في المرفقات مثال لتوضيح الحالات الثلاث

والسلام عليكم ورحمة الله وبركاته


الملفات المرفقة
.zip   TextAutoSizer.zip (الحجم : 69.77 ك ب / التحميلات : 151)
الرد }}}
تم الشكر بواسطة:


الردود في هذا الموضوع
كود لعمل تحجيم تلقائي -AutoSize- لأداة مربع النص TextBox - بواسطة sooriaty03 - 28-04-13, 01:39 PM


التنقل السريع :


يقوم بقرائة الموضوع: