تقييم الموضوع :
  • 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 ك ب / التحميلات : 144)
الرد }}}
تم الشكر بواسطة:
#2
إقتباس :يجب أن تضع للبعض سمعات قبل إعطائها إلى sooriaty03 مرة أخرى.


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





فكرة ذكية جداً، لم تخطر على بالي.

بارك الله فيك.




السلام عليكم ورحمة الله وبركاته
الرد }}}
تم الشكر بواسطة:
#3
@@أبورائد@@ كتب :
السلام عليكم ورحمة الله وبركاته





فكرة ذكية جداً، لم تخطر على بالي.

بارك الله فيك.




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

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

سلمت أخي الحبيب
وأشكر لك مرورك وكلماتك الطيبة

بالتوفيق
الرد }}}
تم الشكر بواسطة:
#4
السلام عليكم

بارك الله فيك فعلا فكرة ممتازة

لكن ياحبذا لو كتبت الموضوع في قسم المقالات يكون احسن فاتمنى من الادراة نقل الموضوع الى قسم مقالات vb.net

إقتباس :يجب ان تضع للبعض سمعات قبل اعطائها الى sooriaty03 مرة اخرى.
الرد }}}
تم الشكر بواسطة:
#5
sajad كتب :السلام عليكم

بارك الله فيك فعلا فكرة ممتازة

لكن ياحبذا لو كتبت الموضوع في قسم المقالات يكون احسن فاتمنى من الادراة نقل الموضوع الى قسم مقالات vb.net


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

جزاك الله خيرا ونفع بك

أشكر لك حرصك على كل ما هو خير

وفقك الله
الرد }}}
تم الشكر بواسطة:
#6
ممتاز جدا
بارك الله فيك وزادك من علمه
لا تحرمنا من مثل هذه الافكار
الرد }}}
تم الشكر بواسطة:
#7
ali.alfoly كتب :ممتاز جدا
بارك الله فيك وزادك من علمه
لا تحرمنا من مثل هذه الافكار

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

سلمت أخي الحبيب
وأشكرك على مرورك الجميل
وكلماتك الطيبة

بالتوفيق
الرد }}}
تم الشكر بواسطة:
#8
اها شكرا لك ..

اها شكرا لك<3 <3 <3
(( نحن قوم أعزنا الله بالإسلام فمهما ابتغينا العزة بغيره أذلنا الله )) .. 











الرد }}}
تم الشكر بواسطة:



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


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم