السلام عليكــم ورحمـة الله وبركاتــه ،،
بعد أن تعلمنا فى هذا الدرس كيفية إنشاء Custom Property Editor وتعلمنا هنا كيفية إنشاء Custom Type Converter سنتعلم اليوم بإذن الله كيفية إنشاء Custom Control Designer وإضافة ما يسمى بالـSmart Tags والذى تجدونه فى الصورة

أرجو الانتباه والتركيز لأن هذا الدرس قد يكون صعبا ولن أحسن شرحه بالشكل المناسب فأرجو التعليق على النقاط التى لم تستطيعوا فهمها
بسم الله نبدأ ,,
- قم بإنشاء مشروع جديد من نوع Windows Application
- قم بإضافة المرجع System.Windows.Forms.Design من قائمة Project ثم Add Reference
- أضف فئة جديدة باسم MyCustomControl والتى تمثل الأداة التى سنجرب عليها المصمم الخاص الذى سنقوم بصنعه بإذن الله تعالى
- أضف الكود التالى إلى هذه الفئة
Imports System.ComponentModel Imports System.Windows.Forms.Design Public Class MyCustomControl Inherits UserControl Public Enum MyEnum Value1 Value2 Value3 End Enum Private _booleanProperty As Boolean Private _enumProperty As MyEnum Public Property BooleanProperty() As Boolean Get Return _booleanProperty End Get Set(ByVal value As Boolean) _booleanProperty = value End Set End Property Public Property EnumProperty() As MyEnum Get Return _enumProperty End Get Set(ByVal value As MyEnum) _enumProperty = value End Set End Property End Class
قمنا بإنشاء خاصيتين إحداهما من النوع Boolean والأخرى من النوع MyEnum ,, فقط لتجربة إنشاء Smart Tags لهما
- نأتى الآن للجزء المهم وهو إنشاء المصمم ,, أضف فئة جديدة إلى المشروع بإسم MyCustomDesigner واجعلها ترث الفئة ControlDesigner
Imports System.Windows.Forms.Design Public Class MyCustomDesigner Inherits ControlDesigner End Class
- نبدأ الآن فى كتابة الأكواد
* الفئة ControlDesigner توفر لك العديد من الإمكانيات التى تمكنك من التعامل مع الأداة وقت التصميم وليس وقت التشغيل
- نبدأ بشئ بسيط جدا ,, نريد عندما يقف المبرمج على الأداة بمؤشر الماوس يتحول لون الأداة إلى الأحمر وعندما يتركها يتحول اللون إلى الأخضر
لعمل ذلك يجب علينا إعادة كتابة الإجرائين OnMouseEnter , OnMouseLeave
- أضف هذا الكود إلى الفئة MyCustomDesigner
Protected Overrides Sub OnMouseEnter() Me.Control.BackColor = Color.Red End Sub Protected Overrides Sub OnMouseLeave() Me.Control.BackColor = Color.Green End Sub
من الكود يتضح أننا نستطيع الوصول إلى الأداة عن طريق الخاصية Control (جبت الديب من ديله :blink: )
- لتجربة الكود السابق والأكواد التالية سنعدل جزء بسيط فى كود الفئة MyCustomControl ,, يجب أن نخبر بيئة التطوير أن مصمم هذه الأداة هو المصمم الخاص الذى قمنا بإنشاءه
- إذهب إلى الفئة MyCustomControl وعدل الكود إلى الشكل التالى
Imports System.ComponentModel Imports System.Windows.Forms.Design Imports System.ComponentModel.Design <Designer(GetType(MyCustomDesigner))> _ Public Class MyCustomControl Inherits UserControl Public Enum MyEnum Value1 Value2 Value3 End Enum Private _booleanProperty As Boolean Private _enumProperty As MyEnum Public Property BooleanProperty() As Boolean Get Return _booleanProperty End Get Set(ByVal value As Boolean) _booleanProperty = value End Set End Property Public Property EnumProperty() As MyEnum Get Return _enumProperty End Get Set(ByVal value As MyEnum) _enumProperty = value End Set End Property End Class
- قم ببناء المشروع ثم أضف الأداة MyCustomControl إلى الفورم وجرب الدخول والخروج عليها بالماوس ستجد أن اللون يتحول ما بين الأحمر والأخضر
- هناك الكثير من الإمكانيات التى توفرها لك الفئة ControlDesigner وبالطبع لن أشرحها جميعها
- نتعرف الآن على كيفية إنشاء ما يسمى Verbs ,, الـVerb هو أمر يتم إضافته للأداة يظهر أسفل نافذة الخصائص كما بالصورة

ويتم إضافته إلى القائمة المنسدلة الخاصة بالأداة (Right-Click Menu) كما بالصورة

وإضافته إلى ما يسمى بالـSmart Tag كما بالصورة

- لنتعلم الآن كيف نضيف هذا الأمر ,, الخاصية المسئولة عن هذه الأوامر هى الخاصية Verbs وهى من النوع System.ComponentModel.Design.DesignerVerbCollection لذلك سنقوم بإعادة قيادة هذه الخاصية لتعود بالأوامر التى نريدها
لنحدد الآن ماهى الأوامر التى نريد إضافتها ,, بما أننا فى مرحلة التعلم فلن نضيف إلا أمرا واحدا وهو About ونريد عند الضغط عليه تظهر رسالة بها نص معين عن مبرمج الأداة
- سنقوم بتعريف متغير من النوع DesignerVerbCollection وهو الذى ستعود به الخاصية Verbs
- أضف هذا الكود
Dim _verbs As DesignerVerbCollection
Public Overrides ReadOnly Property Verbs() As System.ComponentModel.Design.DesignerVerbCollection
Get
If _verbs Is Nothing Then
_verbs = New DesignerVerbCollection
Dim about As New DesignerVerb("About Me", AddressOf OnAbout)
_verbs.Add(about)
End If
Return _verbs
End Get
End Property
Private Sub OnAbout(ByVal sender As Object, ByVal e As EventArgs)
MsgBox("GHOST2010 ,, One of ArabTeam members")
End Subكما يتضح من الكود قمنا بتعريف المتغير _verbs ثم قمنا بإعادة قيادة الخاصية Verbs لتعيد الأوامر المطلوبة
بداخل الخاصية نتحقق أولا من أننا لم نقم بتهيئة المتغير الخاص بنا حتى لا نقوم بتهيئته أكثر من مرة وذلك فى جملة الشرط If _verbs Is Nothing وبالتالى فإن الكود الموجود بداخل جملة الشرط لن يتم تنفيذه إلا مرة واحدة فقط
بداخل جملة الشرط قمنا بتهيئة المتغير _verbs ثم قمنا بتعريف كائن جديد من نوع DesignerVerb والذى يمثل الأمر الذى نريد إضافته ومررنا له معاملين الأول هو نص الأمر والمعامل الثانى هو مفوض الحدث Click أى مؤشر إلى الإجراء الذى سيتم تنفيذه عند ضغط المستخدم على هذا الأمر ثم قمنا بإضافة هذا الأمر إلى قائمة الأوامر فى السطر _verbs.Add(about) وفى نهاية الخاصية نعيد قائمة الأوامر الخاصة بنا Return _verbs
- قم بإعادة بناء المشروع واذهب إلى الأداة ولاحظ ظهور الأمر About فى الثلاثة مواضع التى أشرنا إليها
تعلمنا كيفية إنشاء Smart Tags بدائية ,, الآن نريد إنشاء أوامر أخرى احترافية مثل التى تظهر فى أول صورة
سيتم هذا عن طريق الخاصية ActionList وذلك فى الدرس القادم إن شاء الله حتى لا تملوا من طول الدرس
فى انتظار أسئلتكم ,,


