![]() |
|
مقال- تطوير الكونترول Property Attributes الجزء الثالث - نسخة قابلة للطباعة +- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb) +-- قسم : قسم لغة الفيجوال بيسك VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=182) +--- قسم : قسم مقالات VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=184) +--- الموضوع : مقال- تطوير الكونترول Property Attributes الجزء الثالث (/showthread.php?tid=5231) |
مقال- تطوير الكونترول Property Attributes الجزء الثالث - RaggiTech - 06-10-12 كاتب الموضوع : silverlight
الموضوع : تطوير الكونترول Property Attributesاللغة المستخدمة: الفيجوال بيسك التطبيق: فيجوال استوديو 2005 و 2008 المستوي: التقييم متروك للقارئ إعداد: مهندس / عمر أمين إبراهيم هناك الكثير من Attributes التي تتحكم في خواص وصفات Property الموجودة في أي كونترول وتستخدم هذه Attributes في إرسال معلومات الي IDE أو Integrated Development Environment وذلك من خلال IntelliSense تحديدا ولسوف نقوم بتعريف بعض هذه Attributes نظرا لأهميتها في تطوير الكونترول فهي تلعب دورا هاما في ظهور الكونترول في مرحلة التصميم Design بشكل احترافي وأيضا تضيف الي الكونترول الكثير من الصفات الهامة. بعض هذه Attributes مذكور أدناه ولمزيد من المعلومات يمكن للقارئ أن يطلع علي System.ComponentModel Namespace حيث سيجد الكثير من الأشياء الهامة التي سوف نتحدث عنها لاحقا لأهميتها في تطوير الكونترول ومن هذه الأشياء ِAttributes التي تخص تحديدا Property وهي موضوعنا الحالي. ولاستخدام أي Attribute يجب عمل Import لهذه Namespace BrowsableAttribute CategoryAttribute DescriptionAttribute DefaultValueAttribute DisplayNameAttribute EditorAttribute DesignerSerializationVisibilityAttribute BrowsableAttribute هذا Attribute الهدف منه شئ واحد فقط وهو ضبط خاصية ظهور أو إخفاء Property في Properties Window هذا Attribute له قيمته عبارة عن Boolean إما True أو False لو تم ضبط قيمة هذا Attributeعلي أنها True فان ذلك يعني أن Property يمكن التحكم فيها في حالة Design وفي حالة Run Time أما إذا كانت القيمة False فذلك يعني أن هذه Property يمكن التحكم فيها في مرحلة run Time فقط المثال التالي يوضح كيفية استخدام BrowsableAttribute في الحالتين كود : Imports System.ComponentModelهذا Attribute الهدف منه شئ واحد فقط وهو التصنيف الذي سوف تظهر تحته Property في Properties Window هذا Attribute له قيمه واحده فقط وهي عبارة عن String لو تم ضبط قيمة هذا Attributeعلي أنها "Xtra Appearance" مثلا فان ذلك يعني أن Property سوف تظهر تحت Category يسمي Xtra Appearance وهذا Attribute يتم إضافته الي Property في حالة Design وهو مرتبط مع BrowsableAttribute لان Property يجب أن تكون ظاهره في Properties Windows وبالتالي يتم تصنيفها بعد ذلك أي يتم إضافة CategoryAttribute لها بالطبع يمكن إضافة هذا Attribute أيضا حتى لو كانت BrowsableAttribute يساوي False ولكنها لن تكون ذات قيمه في هذه الحالة. أيضا إذا لم يتم إعطاء قيمه لهذا Attribute فان Property سيتم تصنيفها تحت Misc وهي Default Value كما بالمثال السابق لم يتم إضافة CategoryAttribute وبالتالي فان Property سيتم تصنيفها تحت Misc. المثال التالي يوضح كيفية استخدام CategoryAttribute كود : Imports System.ComponentModelهذا Attribute الهدف منه شئ واحد فقط وهو عبارة توضيح الهدف من الصفة Property وهو عبارة عن Help أو وصف عام وسريع لأي Property في Properties Window و عندما يقف المبرمج بالماوس علي هذه الصفه في مرحلة التصميم سيظهر ما كتبناه بين الاقواس كنوع من التعريف لهذه الخاصيه Property في اسفل Properties Window كود : Imports System.ComponentModelهذا Attribute ومن الواضح من اسمه يختص بتحديد القيمة الأولية أو القيمة الافتراضية لأي Property واعتقد أن الكثير منكم قد لاحظ أن القيم التي تخص كل Property ليست مكتوبة بخط Bold وعند تغيير بيانات Property يتحول الخط الي Bold وذلك حتى يعرف المبرمج أن القيمة الافتراضية قد تم تغييرها الي قيمه جديدة وعندما نقوم بتصميم أو تطوير Control فإننا نريد أن يحدث نفس الشيء لذلك يتم تحديد القيمة الافتراضية لأي Property قمنا بإضافتها الي الكونترول وتختلف DefaultValueAttribute باختلاف نوع Property نفسها طبعا مع الوضع في الاعتبار أن عدم إضافة DefaultValueAttribute الي Property سيجعل الخط المكتوبة به هذه Property عبارة عن Bold المثال التالي يوضح الأمر ولقد تم تحديد القيمة الافتراضية محدده في حالة MyColor1 Property وبالتالي سيظهر الخط المكتوبة به قيمة هذه Property كخط Normal وأيضا لم يتم تحديد القيمة الافتراضية في حالة MyNumber1 Property لذا سيظهر الخط المكتوبة به قيمة هذه Property كخط Bold كود : Imports System.ComponentModelهذا Attribute ومن الواضح من اسمه يختص بإعطاء Property اسم ما وبما انه عبارة عن String بالتالي يمكن عرض الاسم كما نشاء ولو نظرنا الي المثال التالي سنجد انه قد تم إضافة DisplayNameAttribute والاسم الموجود بين الأقواس عبارة عن String غير متصل ومثال علي ذلك لتوضيح الامر. في أي كونترول سنجد خاصية BackColor Property وهنا يمكننا استخدام هذا Attribute لعرض الاسم في Properties Window بهذا الشكل Back Color ولكن عندما نريد أن نستخدم هذه Property ٌ سوف نستخدم المسمي BackColor كاملا في الواقع هذه الخاصية هامه جدا عندما نقوم بعمل Data Binding الي أي Windows Forms Controls ولكن هذا موضوع مختلف و ربما نتحدث عنه في مقال أخر كود : Imports System.ComponentModelهذا Attribute يحدد Editor الذي سوف يتم استخدامه للتغيير في قيمة أو قيم Property في الواقع هذا ِAttribute وكل ما يخص Property Editing مثل UITypeEditor مع مجموعه أخري من Classes يمثلون حجر الزاوية في تطوير الكونترول في مرحلة Design ولتوضيح الأمر أكثر نأخذ علي سبيل المثال خاصية BackgroundImage Property وهي خاصية موجودة في أي كونترول تقريبا وعند الوقوف علي هذه الخاصية بالماوس سيظهر لنا Button صغير وبالضغط عليه سيفتح نافذة ما ومن هناك يتم اختيار الصورة التي من الممكن إضافتها الي الكونترول إن هذا Button الصغير ما هو إلا عبارة عن Editor معين قد تم إضافته الي الخاصية BackgroundImage باستخدام EditorAttribute عموما هذا الموضوع فقط يحتاج الي مقال منفصل وربما أكثر من مقال والمثال التالي يوضح كيفية إضافة EditorAttribute الي Property وفي المثال قمت بإضافة Class جديد باسم MyImageEditor ثم قمت عمل Inherit الي UITypeEditor وتحديدا قمت بعمل Overrides لأحدي Functions الموجودة في UITypeEditor وهي GetEditStyle طبعا لكي يعمل الامر بشكل صحيح يجب علينا أن نتعامل مع معظم Functions الموجودة داخل UITypeEditor Class ومن ثم قمت باستخدام EditorAttribute مع MyImage Property لكي احدد لها فقط Editor المسئول عن التعديل في Property وهذا لتوضيح الأمر للقارئ فقط بكيفية استخدام EditorAttribute إما لكي تعمل الأمور بشكل صحيح فانن لدينا الكثير لنضيفه الي الكود وكما قلت سابقا أن التعامل مع Property Editor يحتاج الي أكثر من مقال كود : Imports System.ComponentModelهذا Attribute من أهم وظائفه هو إضافة Components أو كلاس معين الي الكونترول ومن ثم التحكم بخواصها للاستفادة منها في تطوير الكونترول والمثال المرفق يوضح الأمر بشكل مناسب حيث أننا قمنا بإضافة الكلاس MyComponents بكل Properties الموجودة به تحت Property واحده فقط وهي MyData Property الموجودة داخل الكونترول MyControl كود : Imports System.ComponentModelفي واقع الأمر يوجد الكثير والكثير من Attributes الهامة جدا والتي لها دور هام في خروج الكونترول بشكل احترافي وكما قلت سابقا لمن يريد المزيد من المعلومات عليه بمراجعة محتويات System.ComponentModel Namespace أتمني فقط أننا قد قمنا بتوضيح بعض النماذج الهامة التي تخص Property Attributes وكيفية استخدامها داخل الكونترول ملحوظه : اعلم جيدا أن بعض القراء يريدون تطبيق عملي للمقالات المنشورة تباعا تحت عنوان تطوير الكونترول ولكن ليعلموا أن هناك الكثير من الأمور التي يجب توضيحها قبل أن نقوم بتطبيق عملي وهذه الأشياء تتمثل في Editors VisualStyleRenderer GDI+ Designers عموما أعدكم بتطبيق عملي أو بمشروع صغير مع الجزء الرابع من تطوير الكونترول الذي سيكون موضوعه عن Designers تحديدا حيث أن GDI+ و Editors و VisualStyleRenderer ممكن اعتبارها موضوعات منفصلة وربما بعضها واضح للقارئ من أي مصادر أخري بالتوفيق أخوكم عمر يمكن متابعة الاجزاء السابقه علي هذه اللينك الجزء الأول http://vb4arb.com/vb/showthread.php?1200 الجزء الثاني http://vb4arb.com/vb/showthread.php?1240 |