المتابعون للمدونة

السبت، 24 يونيو 2017

عدد سطزر مربع النص


س: كيف يمكن معرفة عدد السطور الحقيقية، وعدد السطور التي يراها المستخدم فعليا في مربع النص المنسق RichTextBox؟

ج: يمتلك مربع النص المنسق القدرة على تقسيم السطر الطويل على أكثر من سطر فيما يعرف باسم الالتفاف Wrap.. لهذا قد يختلف عدد السطور الحقيقي (التي ينتهي كل منها برمز السطر الجديد \n أو VBCr) عن عدد السطور المعروضة عمليا في مربع النص.

ويسمى السطر الحقيقي بالسطر المعين Assigned Line (أي المحدد برمز السطر الجديد).
بينما يسمى السطر المعروض Physical Line.

وتعيد الخاصية Lines مصفوفة تحتوي على السطور الحقيقية، ويمكنك معرفة عدد خاناتها (عدد السطور) باستخدام الخاصية Length كالتالي:
AcualLines = richTextBox1.Lines.Length
لكن كيف يمكنك معرفة عد السطور المعروضة؟
يمتلك مربع النص المنسق وسيلة هامة يمكنك التلاعب بها لمعرفة عد السطور المعروضة، وهي الوسيلة GetLineFromCharIndex التي ترسل إليها موضع أحد الحروف في النص (أول حرف رقمه 0)، فتعيد إليك رقم السطر الذي يوجد فيه هذا الحرف، وهي تعتبر السطور الملتفة سطورا مستقلة داخلة في العد.
فكيف إذن نستخدمها لمعرفة عدد السطور المعروضة؟
الأمر بسيط: أرسل إليها رقم آخر حرف في النص (موجود في السطر الأخير ورقمه يساوي طول النص -1)، وستعيد إليك الوسيلة GetLineFromCharIndex رقم هذا السطر.. ونظرا لأن أول سطر رقمه 0، فإن آخر سطر سيساوي عدد السطور – 1.. إذن كل ما عليك هو إضافة 1 على ناتج هذه الوسيلة:
LastPos = richTextBox1.TextLength - 1
DisplayedLines = richTextBox1.GetLineFromCharIndex(LastPos) + 1;
لكن فيم يفيدنا معرفة عدد السطور المعروضة فعليا في مربع النص؟
إحدى الفوائد هي حساب ارتفاع النص المعروض في مربع النص، حيث يمكننا معرفة ارتفاع كل سطر باستخدام الخاصية Height التابعة للخط الذي يستخدمه مربع النص، عندئذ يمكننا ضرب ارتفاع السطر في عدد السطور، فنحصل على ارتفاع النص:
TextHieght = richTextBox1.Font.Height * DisplayedLines
لو أردت بعد هذا جعل ارتفاع مربع النص مناسبا لمحتوياته بالضبط، فاستخدم السطر التالي:
richTextBox1.Height = TextHieght
ولو كان لمربع النص إطار مجسم BorderStyle = Fixed3D فأضف 4 على القيمة السابقة (2 للإطار العلوي و 2 للإطار السفلي). 

ملحوظة1:
إذا كنت مبرمج سي شارب، فضع أمام أسماء المتغيرات الكلمة var لتعريفها تلقائيا، وفي نهاية كل سطر فاصلة منقوطة ; مثل:
var LastPos = richTextBox1.TextLength – 1;
وإذا كنت مبرمج فيجوال بيزيك، فضع أمام أسماء المتغيرات الكلمة Dim فحسب مثل:
Dim LastPos = richTextBox1.TextLength – 1
وبهذا يصلح الكود للغتين :) 

ملحوظة2:
بنفس الطريقة، يمكنك معرفة إن كان أحد السطور ملتفا على سطرين أم لا. 

للتفاصيل الكاملة عن مربع النص المنسق RichTextBox وخصائصه ووسائله:
من الصفر إلى الاحتراف برمجة نماذج الويندوز:

 

ليست هناك تعليقات:

إرسال تعليق

ملحوظة: يمكن لأعضاء المدونة فقط إرسال تعليق.

صفحة الشاعر