تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
-- إنشاء عناصر تحكم مخصصة لنظام ويندوز --
#1
كاتب الموضوع : محمد الناشـري

بسم الله الرحمن الرحيم
كثيرا ما تحتاج الى تنفيذ حدث معين لعنصر تحكم ما ... فنذهب بكل بساطة الى محرر الكود ونختار وقت الحدث ثم نكتب مانريد من عنصر التحكم تنفيذة عند وقوع الحدث ...
ولكن ماذا لو اننا تريد تنفيذ نفس الحدث على اكثر من نسخة من العنصر داخل الفورم ..
سيلزمنا حينها ان نعيد كتابة الحدث لكل عنصر ... مما يعد امرا مرهقا بعض الشئ ...
بصفة أوضح ..
ماذا لوكان لدينا نموذج وبة عدد لاباس به من عنصر التجكم TextBox ونريد عند التركيز على عنصر التكست ان يتحول لونة الى الاصفر لينبة المستخدم بانة هو العنصر الذي سيتم الكتابة فية .. مثلا ..
سنقوم بلاشك بجعل لون الخلفية للعنصر تساوي اللون الاصفر عند حدث التركيز .... وسنعيدها الي اللون الابيض عند فقد التركيز .. المهمة تبدو سهلة بعض الشئ ولكن ما ذا لو أردنا تطبيق ذلك على جميع عناصر TextBox الموجودة في الفورم ..... بلاشك سنحتاج الى الاشارة الى كل عنصر بتنفيذ احداث معينة نود تنفيذها ..
والنتيجة كم هائل من الكود ....
يتيح بيئة الدوت نت امكانية اشتقاق الكنترول وتطويرة بما يتناسب مع احتياجنا .. وللقيام بذلك
كل ما عليك هو البدء بمشروع جديد ثم اختر Windows Forms Control Library ....
وقم بتسمية المشروع MohdTextBox مثلا ...
نبدا العمل بتغيير اسم كائن UserControl 1 الى MohdTextBox.vb ثم نقوم بحفظ المشروع ..
انقر show all في نافذة Solution Explorer لتري جميع ملفات المشروع .. يوجد اسفل ملف MohdTextBox.vb الملف المسمى MohdTextBox.Designer.vb قم بفتحة وستشاهد ان الملف يبدا بالعبارتين التاليتين

كود :
[color=#000000][COLOR=#0000bb]Partial [/color][color=#007700]Public Class [/color][COLOR=#0000bb]MohdTextBox
Inherits System[/COLOR][color=#007700].[/color][color=#0000bb]Windows[/color][color=#007700].[/color][color=#0000bb]Forms[/color][color=#007700].[/color][COLOR=#0000bb]UserControl  
[/COLOR][/COLOR]

تدل العبارة الاولى الى ان الملف باكملة ينتمى الى فئة MohdtextBox ...
لاشتقاق جميع خصائص عنصر التحكم TextBox علينا بتغيير العبارة الثانية لتصبح كالتالي

كود :
[color=#000000][COLOR=#0000bb]Inherits System[/color][color=#007700].[/color][color=#0000bb]Windows[/color][color=#007700].[/color][color=#0000bb]Forms[/color][color=#007700].[/color][COLOR=#0000bb]TextBox  
[/COLOR][/COLOR]

وبهكذا نكون قد انشأنا عنصر تجكم جديد واشتققنا جميع خصائص TextBox ..
ولكن ماالفائدة من ذلك .... بلاشك اننا نريد أن اضافة امكانيات جديدة لعنصر التحكم الخاص بنا ..
ننتقل الان الى الكود الخاص بالكائن MohdTextBox.vb وحيث اننا نريد يتغير لون خلفية مربع النص الى اللون الاصفر عندما يكون عنصر التحكم نشطاً لذا علينا أن نكتب الكود الخاص بنا في حدث Enter الخاص بعنصر التحكم ..
نقوم بتوسيع القائمة المنسدلة Events وحدد الحدث Enter ثم نكتب الاتي

كود :
[color=#000000][COLOR=#007700]Private [/color][color=#0000bb]Sub MohdTextBox_Enter[/color][color=#007700]([/color][color=#0000bb]ByVal sender [/color][color=#007700]As [/color][color=#0000bb]Object[/color][color=#007700], [/color][color=#0000bb]ByVal e [/color][color=#007700]As [/color][color=#0000bb]System[/color][color=#007700].[/color][color=#0000bb]EventArgs[/color][color=#007700]) [/color][color=#0000bb]Handles Me[/color][color=#007700].[/color][COLOR=#0000bb]Enter
Me[/COLOR][color=#007700].[/color][color=#0000bb]BackColor [/color][color=#007700]= [/color][color=#0000bb]Color[/color][color=#007700].[/color][COLOR=#0000bb]Yellow
End Sub  
[/COLOR][/COLOR]

بعد ذلك لابد لنا بان نقوم ببرمجة الحدث Leave حتي يتم اعادة ضبط اللون الخلفية الى اللون الابيض .عند الغاء تنشيطة ...

كود :
[color=#000000][COLOR=#007700]Private [/color][color=#0000bb]Sub MohdTextBox_Leave[/color][color=#007700]([/color][color=#0000bb]ByVal sender [/color][color=#007700]As [/color][color=#0000bb]Object[/color][color=#007700], [/color][color=#0000bb]ByVal e [/color][color=#007700]As [/color][color=#0000bb]System[/color][color=#007700].[/color][color=#0000bb]EventArgs[/color][color=#007700]) [/color][color=#0000bb]Handles Me[/color][color=#007700].[/color][COLOR=#0000bb]Leave
Me[/COLOR][color=#007700].[/color][color=#0000bb]BackColor [/color][color=#007700]= [/color][color=#0000bb]Color[/color][color=#007700].[/color][COLOR=#0000bb]White
End Sub  
[/COLOR][/COLOR]

نقوم الان بعمل Build لمشروعنا ...وبكذا نكون قد انشانا عنصر تحكم به الخاصية الاضافية وهي تغير لون الخلفية عند تنشيط العنصر .. ونستطيع استخدامة في اي مشروع خاص بنا او ارسالة لمن نشاء ليستخدمة ...
ولاضافة عنصر التحكم الجديد الى اي مشروع نذهب الى نافذة ToolBox ونضغط على زر الفارة الايمن ونختار Choose Itemes ومن نافذة Choose ToolBox Itemes نضغط زر الاستعراض ونذهب الى مشروعنا وداخل مجلد Bin سنجد الملف MohdTextBox.dll نختارة ونضغط فتح وسيتم اضافتة الى المشروع ..
يتبع ...
}}}
تم الشكر بواسطة:
#2
طلب احد الاخوان هنا ... ان يتم تغير العلامة "." الى " ،" تلقائيا وسأل كيف يتم تطبيقها على العديد من عناصر التحكم TextBox ..
ولتنفيذ ذلك كل ماعلينا هو الذهاب الى مشروعنا ..
واضافة الكود التالي عند حدث
LostFocus

الكود

كود :
[color=#000000][COLOR=#007700]Private [/color][color=#0000bb]Sub MohdTextBox_LostFocus[/color][color=#007700]([/color][color=#0000bb]ByVal sender [/color][color=#007700]As [/color][color=#0000bb]Object[/color][color=#007700], [/color][color=#0000bb]ByVal e [/color][color=#007700]As [/color][color=#0000bb]System[/color][color=#007700].[/color][color=#0000bb]EventArgs[/color][color=#007700]) [/color][color=#0000bb]Handles Me[/color][color=#007700].[/color][COLOR=#0000bb]LostFocus
Dim newstr [/COLOR][color=#007700]As [/color][COLOR=#0000bb]String
Dim oldstr [/COLOR][color=#007700]As [/color][color=#0000bb]String [/color][color=#007700]= [/color][color=#0000bb]Me[/color][color=#007700].[/color][COLOR=#0000bb]Text
newstr [/COLOR][color=#007700]= [/color][color=#0000bb]oldstr[/color][color=#007700].[/color][color=#0000bb]Replace[/color][color=#007700]([/color][color=#dd0000]"."[/color][color=#007700], [/color][color=#dd0000]"،"[/color][COLOR=#007700])
[/COLOR][color=#0000bb]Me[/color][color=#007700].[/color][color=#0000bb]Text [/color][color=#007700]= [/color][COLOR=#0000bb]newstr
End Sub  
[/COLOR][/COLOR]


يتبع ....
}}}
تم الشكر بواسطة:
#3
تعرفنا سابقا على كيفية إنشاء عناصر تحكم مخصصة .. وكان الأمر في غاية السهولة .. ولكن وكما تلاحظون في مشروعنا أن المستخدم لأداتنا المخصصة ( وطبعا هو المبرمج ) لا يستطيع التحكم أو اختيار الألوان التي تناسبه أو تناسب مشروعه...
والسؤال هنا لماذا لا نجعل هذه القيمة كخاصية للعنصر كي يستطيع المطور ضبطها كيفما يشاء ?....
لنضف خاصيتين هما EnterFocusColor وLeaveFocusColor.. وحيث أن عنصر الذي انشأ ناه خصيصا من اجل عملية إدخال البيانات فسوف يكون من المفيد أيضاً إضافة سمة جديدة وثيقة الصلة بإدخال البيانات ألا وهي تنبيه المستخدم في حال ترك احد الحقول الإجبارية فارغا وذلك بظهور اللون الذي يتم تحديده من قبل المطور ...
وطبعا لابد أن نحدد أولا ما إذا كان الحقل إجباريا أم لا ...باستخدام خاصية Mandatory فإذا كان الحقل إجباريا وترك خاليا ستتغير قيمته بناء على اللون المحدد في خاصية MandatoryColor
سنستعرض ألان للخصائص التي سنخصصها لعنصر التحكم .....
خاصية EnterFocusColor عند تنشيط عنصر التحكم سيتم ضبط لون الخلفية على هذه القيمة
خاصية LeaveFocusColor : عند إلغاء تنشيط عنصر التحكم يتم ضبط لون الخلفية على هذه القيمة ولكن هنا يجب الانتباه إلى انه إذا كان الحقل إجباري أي أن خاصية Mandatory قيمتهاTrue وكان الحقل خاليا فستكون الأولية لخاصية Mandatory

خاصية Mandatory :إذا كانت قيمة هذه الخاصية هي True فهذا يعني أن الحقل إجباري والعكس بالعكس
خاصية MandatoryColor : تضبط هذه الخاصية لون خلفية عنصر التحكم في حال كانت خاصية Mandatory لها القيمة True

[SIZE=3]والآن جاء دور كتابة الأكواد ....

[/SIZE]

كود :
[COLOR=#000000][COLOR=#0000bb]استيراد فضاء الاسماء
Imports System[/COLOR][color=#007700].[/color][COLOR=#0000bb]ComponentModel
Imports System[/COLOR][color=#007700].[/color][color=#0000bb]ComponentModel[/color][color=#007700].[/color][COLOR=#0000bb]Design
Imports System[/COLOR][color=#007700].[/color][COLOR=#0000bb]Drawing
Imports System[/COLOR][color=#007700].[/color][color=#0000bb]Windows[/color][color=#007700].[/color][COLOR=#0000bb]Forms
Imports System[/COLOR][color=#007700].[/color][color=#0000bb]Windows[/color][color=#007700].[/color][color=#0000bb]Forms[/color][color=#007700].[/color][COLOR=#0000bb]Design  
[/COLOR][/COLOR]


جزء التعريفات في Declarations

كود :
[COLOR=#000000][COLOR=#0000bb] هذة الخاصية لتحديد مااذا كان الحقل اجباري ام لا
Dim _mandatory [/COLOR][color=#007700]As [/color][COLOR=#0000bb]Boolean
خاصية تحديد لون خلفية العنصر عند التنشيط وعند الغاء التنشيط
Dim _enterFocusColor[/COLOR][color=#007700], [/color][color=#0000bb]_leaveFocusColor [/color][color=#007700]As [/color][COLOR=#0000bb]Color
خاصية تحديد اللون اذا كان الحقل اجباري
Dim _mandatoryColor [/COLOR][color=#007700]As [/color][COLOR=#0000bb]Color  
[/COLOR][/COLOR]


يتبع...
}}}
تم الشكر بواسطة:
#4
نكمل كتابة باقي الأكود
وضع خاصية التحكم في العنصر اذا كان اجباري او لا في اطار الخصائص ..

كود :
[color=#000000][COLOR=#0000bb]Property Mandatory[/color][color=#007700]() As [/color][COLOR=#0000bb]Boolean

Get
Mandatory [/COLOR][color=#007700]= [/color][COLOR=#0000bb]_mandatory
End Get
Set[/COLOR][color=#007700]([/color][color=#0000bb]ByVal Value [/color][color=#007700]As [/color][color=#0000bb]Boolean[/color][COLOR=#007700])
[/COLOR][color=#0000bb]_mandatory [/color][color=#007700]= [/color][COLOR=#0000bb]Value
End Set
End Property  
[/COLOR][/COLOR]

وضع خاصية ضبط لون خلفية العنصر اذا كان اجباري في اطار الخصائص ..

كود :
[color=#000000][COLOR=#0000bb]Property MandatoryColor[/color][color=#007700]() As [/color][COLOR=#0000bb]Color

Get
MandatoryColor [/COLOR][color=#007700]= [/color][COLOR=#0000bb]_mandatoryColor
End Get
Set[/COLOR][color=#007700]([/color][color=#0000bb]ByVal Value [/color][color=#007700]As [/color][color=#0000bb]Color[/color][COLOR=#007700])
[/COLOR][color=#0000bb]_mandatoryColor [/color][color=#007700]= [/color][COLOR=#0000bb]Value
End Set
End Property  
[/COLOR][/COLOR]
}}}
تم الشكر بواسطة:
#5

وضع خاصية ضبط لون خلفية العنصر عند التنشيط في اطار الخصائص ..

كود :
[color=#000000][COLOR=#0000bb]Property EnterFocusColor[/color][color=#007700]() As [/color][COLOR=#0000bb]Color

Get
EnterFocusColor [/COLOR][color=#007700]= [/color][COLOR=#0000bb]_enterFocusColor
End Get
Set[/COLOR][color=#007700]([/color][color=#0000bb]ByVal Value [/color][color=#007700]As [/color][color=#0000bb]Color[/color][COLOR=#007700])
[/COLOR][color=#0000bb]_enterFocusColor [/color][color=#007700]= [/color][COLOR=#0000bb]Value
End Set
End Property  
[/COLOR][/COLOR]

وضع خاصية ضبط لون خلفية العنصر عند الغاء التنشيط في اطار الخصائص ..

كود :
[color=#000000][COLOR=#0000bb]Property LeaveFocusColor[/color][color=#007700]() As [/color][color=#0000bb]System[/color][color=#007700].[/color][color=#0000bb]Drawing[/color][color=#007700].[/color][COLOR=#0000bb]Color
Get
LeaveFocusColor [/COLOR][color=#007700]= [/color][COLOR=#0000bb]_leaveFocusColor
End Get
Set[/COLOR][color=#007700]([/color][color=#0000bb]ByVal Value [/color][color=#007700]As [/color][color=#0000bb]System[/color][color=#007700].[/color][color=#0000bb]Drawing[/color][color=#007700].[/color][color=#0000bb]Color[/color][COLOR=#007700])
[/COLOR][color=#0000bb]_leaveFocusColor [/color][color=#007700]= [/color][COLOR=#0000bb]Value
End Set
End Property  
[/COLOR][/COLOR]

ملاحظة : نلاحظ أن الخصائص قد تم وضعها في تبويب Misc في اطار الخصائص وهذا الاختصار لعلامة التبويب يعني الخصائص المتنوعة... وسنتعر ف في الموضوع القادم على كيفية وضع الخصائص في ما يناسبها من تبويب ....
}}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  طريقة إنشاء برنامج طباعة ملصقات الباركود ملهمـ 1 4,398 22-12-21, 05:09 PM
آخر رد: alessam4pro
  [درس فيديو] لماذا يتم وضع سطر تحت عناصر القائمة MenuStrip في أغلب التطبيقات ؟ سعود الشامان 2 2,026 01-07-18, 01:17 AM
آخر رد: YousefOkasha
  دورة إنشاء برنامج مبيعات متكامل ملهمـ 1 2,720 02-05-18, 12:04 AM
آخر رد: عبد العزيز البسكري
  تشغيل برنامجك كمدير (administration) عند العميل برمجيا على ويندوز 7 Omar Mekkawy 5 5,158 05-01-14, 03:08 AM
آخر رد: mero5000
  الصورة العربية - لآ مشقة بعد الآن في إنشاء الدروس ! RaggiTech 2 3,007 25-04-13, 12:22 PM
آخر رد: خليل اسماعيل
  كيفية انشاء برنامج تثبيت لخدمة ويندوز Windows Service على vs2008 RaggiTech 1 2,495 05-10-12, 02:39 AM
آخر رد: RaggiTech
  مثال على عملية إنشاء Windows Service – إنشاء برنامج تشفير تلقائي للملفات RaggiTech 1 2,586 05-10-12, 01:42 AM
آخر رد: RaggiTech
  تفعيل خاصية RequireAdministrator لبرنامجك للتحكم بملفات الويندوز بسهولة في ويندوز 7 RaggiTech 0 2,067 03-10-12, 10:47 AM
آخر رد: RaggiTech
  تعلم إنشاء قائمة ListItem خاصة بك -- ماهي - و ماخصائصها - و مافوائدها - RaggiTech 0 2,013 03-10-12, 09:32 AM
آخر رد: RaggiTech
  تشغيل برنامجك كمدير (administration) عند العميل برمجيا على ويندوز 7 RaggiTech 0 2,781 03-10-12, 08:47 AM
آخر رد: RaggiTech

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


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