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

الأربعاء، 23 أكتوبر 2013

تغيير ارتفاع اللافتة لتستوعب النص


سس: في نماذج الويندوز، كيف يمكن تغيير ارتفاع اللافتة Label لتستوعب النص المكتوب داخلها بالضبط، مع تثبيت عرضها؟.. وهل يمكن عرض منزلق رأسي في اللافتة؟

 

ج: تمتلك اللافتة الخاصية AutoSize، وعند جعل قيمتها True فإن اللافتة تغير حجمها لتستوعب النص المكتوب داخلها.. لكن هذه الخاصية تسبب مشكلة مع السطور الطويلة جدا، فهي تجعل عرض اللافتة كبيرا جدا ليستوعب أطول سطر مكتوب فيها.. لهذا إذا أردت تثبيت عرض اللافتة وجعلها تقسم السطر الطويل على أكثر من سطر، فيجب أن تضع في الخاصية AutoSize القيمة False.. لبكن في هذه الحالة سيظل ارتفاع اللافتة ثابتا، وقد يكون أكبر من ارتفاع السطور المكتوبة داخلها، وقد يكون أصغر مما يجعل بعض السطور لا تظهر في الجزء المعروض من اللافتة.

لحل هذه المشكلة يجب علينا قياس ارتفاع النص.. يمكن فعل هذا باستخدام كائن الرسوم Graphics Object الخاص باللافتة، فهو يمتلك وسيلة اسمها MeasureString، تقوم بقياس حجم النص المرسل إليها عند عرضه في اللافتة عندما يكون لها عرض معين.. وتعيد هذه الوسيلة كائنا من النوع SizeF يحتوي على عرض وارتفاع النص عند وضعه في اللافتة.. كل ما علينا إذن هو تغيير ارتفاع اللافتة إلى هذا الارتفاع:

Label1.AutoSize = False

Dim G = Label1.CreateGraphics( )

Dim textSize = G.MeasureString(Label1.Text, Label1.Font, Label1.Width)

Label1.Height = Math.Ceiling(textSize.Height)

لاحظ أن ارتفاع اللافتة قد يكون كبيرا جدا إذا وضعت فيها نصا طويلا جدا.. يمكن التغلب على هذه المشكلة باستخدام منزلق رأسي Vertical ScrollBar.. طبعا اللافتة لا تمتلك مثل هذا المنزلق، لهذا عليك وضعها داخل لوحة Panel، وجعل اللافتة تنطبق على حافتها العلوية (Dock = Top) والتأكد من جع اللوحة ذاتية الانزلاق:

Panel1.AutoScroll = True

بهذه الطريقة صار لديك لافتة تغير ارتفاعها لتحتوي النص المكتوب فيها، مع عرض منزلق رأسي إذا زاد ارتفاع النص عن حد معين (تتحكم أنت فيه بالتحكم في ارتفاع اللوحة).

 

ملحوظة: يمكنك استخدام هذه اللافتة المرنة في تصميم مربع رسالة Message Box أكثر أناقة من مربع الرسالة الخاص بالويندوز، فعرض منزلق رأسي يريحك من تغيير عرض مربع الرسالة، ويجعلك لا تقلق من عرض الرسائل الطويلة جدا.

 

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

إرسال تعليق

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

صفحة الشاعر