منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

نسخة كاملة : إنشاء مكتبة تضيف وظائف جديدة للتحكمات الموجودة
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
كاتب الموضوع : samerselo

- أنشئ مشروعا جديدا من النوع 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
- الآن أي وظائف متكررة تستخدمها يمكنك إضافتها للتحكمات أو الفئات الموجودة وأصبحت وكأنه وظائف أساسية وذلك بإنشاء المكتبة الخاصة بك واستيرادها للمشروع
المثال العملي على الموضوع في المرفقات
تعديل بسيط أخير - غير موجود في المثال في رابط التحميل

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

كود :
Public Module TestExtending
بالسطر

كود :
<Global.Microsoft.VisualBasic.HideModuleName()> _
Public Module TestExtending
وبذلك عند استخدام المكتبة يمكنك أن تستبدل سطر الاستيراد التالي

كود :
Imports TestExtendingLib.TestExtending
بسطر الاستيراد التالي

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


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