تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
تطوير الكونترول Designers الجزء الرابع
#3
كيف نقوم بإضافة تعديلات الي Custom Designer

لكي نقوم بذلك نحتاج أن نتحدث قليلا عن ParentControlDesigner
إن الحديث عن ParentControlDesigner Class سوف يغطي بالتبعية الحديث عن ControlDesigner Class ولقد أوضحنا الفرق بينهم وأنهم لا يختلفان علي الإطلاق إلا في أشياء قليله وعموما ParentControlDesigner Class له صفات Properties و طرق Methods أكثر من ControlDesigner Class لذلك سيكون هو هدفنا هنا في هذا الجزء من تطوير الكونترول.
ملحوظه هامه هناك بعض الصفات التي تخص ParentControlDesigner لا نحتاج الي التغيير في قيمها ألأوليه لان الأمر حينئذ سيكون عبارة عن مضيعة للوقت لكن بما أن الهدف هنا هو توضيح وشرح ParentControlDesigner فلسوف أحاول أن إعطاء فكره عن معظم الصفات التي تخص ParentControlDesigner والتي تهمنا في تصميم Custom Control

AllowControlLasso Property

هذه الصفة لها قيمه عبارة عن Boolean أي True أو False وهي خاصية يتم استدعاؤها بعد أن نضيف عنصر ما من Toolbox وتقوم برسم ReversibleRectangle ومن الأفضل عدم التعديل فيها واستخدام قيمتها الافتراضية لكن لو أراد القارئ أن يقوم بتعديلها فكل ما عليه أن يري الكود المرفق. وأيضا لمزيد من المعلومات عن ReversibleRectangle يمكنك أن تراجع كلاس مهم جدا وهو ControlPaint Class وهناك مقال قمت بنشره بالموقع تحت عنوان الكلاس التائه عن هذا الموضوع يمكن أن ترجع إليه إن أردت

AllowGenericDragBox Property

هذه الصفة لها قيمه عبارة عن Boolean أي True أو False وهي تحدد هل يتم رسم Drag Box عندما نحاول أن نقوم بعمل Dragging لآي عنصر من Toolbox والقيمة الافتراضية لها True ومن الأفضل عدم التعديل بها لكن لو أراد القارئ أن يقوم بتعديلها فكل ما عليه أن يري الكود المرفق.

ِAllowSetChildIndexOnDrop Property

هذه الصفة الغرض منها هو الحفاظ علي z-Oorder لكل الكونترول التي يتم سحبها وإضافتها Toolbox و z-Order عبارة عن visual layering للكونترول Control التي تضاف الي Custom Control وقيمة هذه الصفة عبارة عن Boolean أي True أو False وعموما القيم الافتراضية لها عبارة عن True ومن الأفضل عدم التعديل فيها واستخدام قيمتها الافتراضية لكن لو أراد القارئ أن يقوم بتعديلها أن يري الكود المرفق.

DrawGrid Property

واضح جدا أن هذه الصفة تسمح برسم Grid داخل Custom Control وهي عبارة عن Boolean أي True أو False والقيمة الافتراضية لها False ولو أردت أن تظهر Grid انظر الي الكود المرفق.

DefaultControlLocation Property

هذه الصفة الهدف منها شئ هام جدا فهي المسئولة عن تحديد النقطة Point الافتراضية أو الأولية أو مكان ChildControl داخل الكونترول أي عندما نقوم بعمل Double-Click لكي نضيف أي كونترول من Toolbox الي داخل الكونترول الخاص بنا.
مثال علي ذلك عندما تقوم باستخدام الماوس والضغط علي أي كونترول عن طريق Double-Click وإضافة Button مثلا من Toolbox الي أي كونترول أو حتى الي الفورم سنجد أن المكان سيقع داخل الفورم في منطقه معينه وهذه الصفة التي نتحدث عنها هي المسئولة عن ذلك.
إذن لكي نحدد المكان الذي سيقع فيه أي كونترول داخل الكونترول الذي نصممه علينا أن نقوم بعمل Overrides لهذه الخاصية و مثال غلي ذلك انظر الي الكود المرفق.

GridSize Property

من الواضح الهدف من الصفة فهي تحدد مقاس Grid وهي مرتبطة بالصفة DrawGrid واقل قيمه افتراضية 2 واكبر قيمة افتراضية 200 لكن لو أراد القارئ أن يقوم بتعديلها فكل ما عليه أن يري الكود المرفق.

MouseDragTool Property

هذه الصفة تستخدم لإضافة ToolBoxItem أثناء عملية السحب والإفلات الي Designer وهي مرتبطة بكلاس أخر وهوToolBoxItem Class وهذا الكلاس مرتبط نشئ أخر مهم و هو System.Drawing.Design Namespace. الكود المرفق.يوضح كيفية استخدام هذه الصفة
الأن نقوم بعمل Build للكونترول وسوف نراه موجودا داخل Toolbox لنقوم بإضافته الي الفورم باستخدام Double Click نقوم بإضافة Button إلي الكونترول سنلاحظ أن مقاس الكونترول Size صغير إذن نحن نحتاج الي تحديد Size جديد وأيضا لو وقفنا بالماوس علي الباتون الذي أضفناه الي الكونترول ونظرنا الي صفاته المختلفة داخل Properties Window سنجد أن Button.Location أصبح (20, 20).

هناك ملحوظه هامه جدا ذكرتها مايكروسوفت بخصوص التعديل في Size Property وهي للحصول علي أداء أفضل للكونترول يجب أن نقوم بتعديل خاصية Size عن طريق عمل Overrides لخاصية DefaultSize Property وليس عن طريق Constructor أي (Public Sub New)
لنتوقف هنا قليلا لنستعرض الكود الي يغطي كيفية استخدام هذه الصفات السابقة


كود :
Imports System.ComponentModel
Imports System.Windows.Forms.Design
Imports System.Security.Permissions
Imports System.ComponentModel.Design
Imports System.Drawing.Design

<System.Security.Permissions.PermissionSetAttribute(System.Security.Permissions.SecurityAction.Demand, Name:="FullTrust")> _
<Designer(GetType(MyDesigner), GetType(IDesigner))> _
Public Class MyControl
Inherits Control

' Set the Default size of the Control
Protected Overrides ReadOnly Property DefaultSize() As System.Drawing.Size
Get
Return New Size(200, 200)
End Get
End Property

End Class 'MyControl ------------> Custom Control

<System.Security.Permissions.PermissionSetAttribute(System.Security.Permissions.SecurityAction.Demand, Name:="FullTrust")> _
Public Class MyDesigner
Inherits ParentControlDesigner


Protected Overrides ReadOnly Property DefaultControlLocation() As System.Drawing.Point
Get
' any Controlwill be aded at point to be at x = 20 and y = 20
Return New Point(20, 20)
End Get
End Property

Protected Overrides ReadOnly Property AllowControlLasso() As Boolean
Get
Return False
End Get
End Property

Protected Overrides ReadOnly Property AllowGenericDragBox() As Boolean
Get
Return True

End Get
End Property

Private TrueOrFalse As Boolean = True
Protected Overrides Property DrawGrid() As Boolean
Get
Return TrueOrFalse
End Get
Set(ByVal value As Boolean)
TrueOrFalse = value
End Set
End Property

Private ZOrdersTrueOrFalse As Boolean = True
Protected Overrides ReadOnly Property AllowSetChildIndexOnDrop() As Boolean
Get
Return ZOrdersTrueOrFalse
End Get
End Property

Private gsize As Size = New Size(20, 20)
Protected Overloads Property GridSize() As Size
Get
Return gsize
End Get
Set(ByVal value As Size)
gsize = value
End Set
End Property

Private m_Item As ToolBoxItem = Nothing
Protected Overloads ReadOnly Property MouseDragTool() As ToolboxItem
Get
Return m_Item
End Get
End Property


End Class 'MyDesigner ------------> Custom Designer
}}}
تم الشكر بواسطة:


الردود في هذا الموضوع
تطوير الكونترول Designers الجزء الرابع - بواسطة Raggi Tech - 03-10-12, 09:10 AM

المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  الجزء الثالث من:كيف تجعل الـ Text Box ذكي!يترجم العمليات الحسابية ويخرج الناتج (الأقواس المتعددة) !! أنس محمود 10 8,404 19-07-22, 12:15 AM
آخر رد: StartLight4000
  حساب قيمة معادلة(اقصد صيغة دون مجاهيل) مكتوبة بالتكست : الجزء الخامس والاخير محمد شريقي 4 4,838 23-02-18, 10:44 PM
آخر رد: العواد الصغير
  مقدمة إلي إخفاء المعلومات - الجزء الأول silverlight 5 4,519 07-01-17, 10:44 PM
آخر رد: Basil Abdallah
  مقدمة إلي إخفاء المعلومات - الجزء الثاني silverlight 1 3,214 06-01-17, 11:52 AM
آخر رد: silverlight
  إيجاد جميع الكونترول الموجودة في الفورم Recursively Find All Controls in Form silverlight 0 3,276 26-05-15, 12:31 AM
آخر رد: silverlight
  تحويل الفيديو في برامجك-الجزء الثاني( إصلاح للمشاكل + تعديل للروابط + توضيح للأمر ) RaggiTech 1 3,520 10-12-14, 06:37 PM
آخر رد: abulayth
  الجزء الثاني من:كيف تجعل الـ Text Box ذكي!يترجم العمليات الحسابية ويخرج الناتج ( العمليات المتعددة)! أنس محمود 0 3,009 22-02-13, 12:39 AM
آخر رد: أنس محمود
  مقال- تطوير الكونترول Property Attributes الجزء الثالث RaggiTech 0 2,477 06-10-12, 12:20 AM
آخر رد: RaggiTech
  الجزء الثاني - تطوير الكونترول Interfaces RaggiTech 0 2,464 06-10-12, 12:19 AM
آخر رد: RaggiTech
  مقال- تطوير الكونترول Skin Control RaggiTech 0 2,633 06-10-12, 12:08 AM
آخر رد: RaggiTech

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


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