الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

إنشاء مكتبة تضيف وظائف جديدة للتحكمات الموجودة بدون استخدام الوراثة

بدأه محمد سامر أبو سلو في 17 أبريل 2008 · 1 رد · 1,160 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

هذا الموضوع تطبيق على موضوع قديم لي الطرائق المُوَسِّعة Extension Methods فيرجى قراءته وفهمه قبل المتابعة هنا

- أنشئ مشروعا جديدا من النوع Windows Forms Application كي نقوم بالعمل عليه

- من قائمة File ومن القائمة الفرعية ADD أضف مشروعا جديدا للمشروع الحالي من النوع Class Library وقم بتسميته TestExtendingLib

في ملف الكود الخاص بالمكتبة أضف في بدايته المراجع التالية الضرورية لعمل مثالنا هنا بعد التأكد من أنك قد أضفت المراجع المناسبة لها من صفحة References من خصائص My Project

Imports System.Runtime.CompilerServices
Imports System.Math
Imports System.Drawing
Imports System.Windows.Forms

- استبدل التعريف

Public Class Class1

End Class

بالتعريف

Public Module TestExtending

End Module

- انتهت عملية التهيئة الآن وأصبحنا جاهزين لإضافة توسعاتنا

- سأبدا بإضافة الوظيفة Alert لصندوق النصوص التي ستحول لون الخلفية له إلى الأحمر والكتابة إلى الأصفر عند استدعائها - داخل تعريف الـ Module السابق أدخل الكود التالي

   <Extension()> _
	Sub Alert(ByVal TxtBx As TextBox)
		TxtBx.Font = New Font(TxtBx.Font, FontStyle.Bold)
		TxtBx.ForeColor = Color.Yellow
		TxtBx.BackColor = Color.Red
	End Sub

- وسنضيف وظيفة أخرى لتوسيع النوع String بحيث تحول القيمة الموجودة في السلسلة النصية إلى Double ثم تضربها بالعدد الممرر وتعيد الناتج

   <Extension()> _
	Function Multiply(ByVal InString As String, _
					  ByVal Multply As Double) As Double

		Return CDbl(InString) * Multply
	End Function

- قم بعمل Build للمكتبة TestExtending

- من أجل التجربة انقر بزر الفأرة اليميني على تطبيق ويندوز الذي أنشأناه في البداية ثم اضغط Add Reference وأضف مرجعا للمكتبة التي أنشأناه للتو ثم أضف الاستيراد التالي في بداية كود النموذج

Imports TestExtendingLib.TestExtending

- أضف TextBox و Button و ListBox للنموذج ثم انقر نقرا مزدوجا على الزر لإنشاء حدث النقر عليه ثم أدخل الكود التالي لاختبار الوظيفتين اللتان أضفناهما سابقا

		Me.TextBox1.Text = "123.456"
		Me.TextBox1.Alert()
		Dim s As String = Me.TextBox1.Text
		MsgBox(s.Multiply(13))

شغل البرنامج واضغط على الزر وانظر النتيجة

- كما ترى أضفنا لصندوق النصوص وظيفة جديدة لم تكن موجودة سابقا تسمى Alert يمكننا الاستفادة منها وتطبيقها على أي صندوق نصوص في أي مشروع نريده فقط بإضافة المكتبة والاستيراد المناسب كما رأينا سابقا كما أضفنا أيضا الوظيفة Multiply لنوع البيانات String ويمكن استخدامه أيضا في أي مشروع بنفس الطريقة

- يمكننا أيضا إضافة وظيفة لـ ListBox لتفريغها وملئها ببعض البيانات مثلا بنفس الطريقة حيث يمكنك إضافة الكود التالي للمكتبة ثم عمل ReBuild لها وتجربة كيف أن صندوق القائمة أصبح يمتلك الوظيفة الجديدة

	<Extension()> _
	Sub ClearAndFillComputerCorp(ByVal LstBx As ListBox)
		LstBx.Items.Clear()

		LstBx.Items.Add("Micrsoft")
		LstBx.Items.Add("Sun")
		LstBx.Items.Add("Intel")
		LstBx.Items.Add("IBM")
		LstBx.Items.Add("Borland")
		LstBx.Items.Add("CyberLink")
		LstBx.Items.Add("Nvidia")
		LstBx.Items.Add("Gigabyte")
		LstBx.Items.Add("MSI")
	End Sub

- كما يمكننا أيضا إضافة وظيفة للتحكم Button تغير من مظهره بنفس الطريقة

   <Extension()> _
	Sub YellowOnDarkBlue(ByVal Btn As Button)
		Btn.Font = New Font(Btn.Font, FontStyle.Bold)
		Btn.ForeColor = Color.Yellow
		Btn.BackColor = Color.DarkBlue
	End Sub

- الآن أي وظائف متكررة تستخدمها يمكنك إضافتها للتحكمات أو الفئات الموجودة وأصبحت وكأنه وظائف أساسية وذلك بإنشاء المكتبة الخاصة بك واستيرادها للمشروع

مرفق مثال عملي

textextending.zip

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

#2

تعديل بسيط أخير - غير موجود في المثال المرفق

- في ملف الكود الخاص بالمكتبة TestExtendingLib فقط قم باستبدال السطر التالي في بداية الملف

Public Module TestExtending

بالسطر

<Global.Microsoft.VisualBasic.HideModuleName()> _
Public Module TestExtending

وبذلك عند استخدام المكتبة يمكنك أن تستبدل سطر الاستيراد التالي

Imports TestExtendingLib.TestExtending

بسطر الاستيراد التالي

Imports TestExtendingLib

وشرح التعديل هو بما أن كودنا في المكتبة ضمن Module ويمكننا استخدام الدالات الموجودة في الـ Module باسمها فقط لذا أضفنا الواصفة HideModuleName التي تسبب إخفاء اسم الـ Module وبالتالي اختصار الاستيراد عند استدعاء المكتبة

طبعا بعد التعديل لاتنس عمل Rebuild للمكتبة حتى تسري التعديلات الجديدة

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

مواضيع مشابهة