الجديد

مقدمة لبرمجة عنصر تحكم VB.NET مع الوراثة

مقدمة لبرمجة عنصر تحكم VB.NET مع الوراثة

يمكن أن يكون بناء مكونات مخصصة كاملة مشروعًا متقدمًا للغاية. ولكن يمكنك إنشاء فئة VB.NET التي تحتوي على العديد من مزايا مكون مربع الأدوات بأقل جهد ممكن. إليك الطريقة!

للحصول على نكهة لما عليك القيام به لإنشاء مكون مخصص كامل ، جرب هذه التجربة:

-> افتح مشروع تطبيق Windows جديد في VB.NET.
-> أضف CheckBox من Toolbox إلى النموذج.
-> انقر فوق الزر "إظهار كافة الملفات" أعلى "مستكشف الحلول".

سيؤدي ذلك إلى عرض الملفات التي ينشئها Visual Studio لمشروعك (بحيث لا تضطر إلى ذلك). كحاشية سفلية تاريخية ، قام برنامج التحويل البرمجي VB6 بالكثير من الأشياء نفسها ، لكنك لم تتمكن من الوصول إلى الكود لأنه تم دفنه في "كود p" مترجم. يمكنك تطوير عناصر تحكم مخصصة في VB6 أيضًا ، لكن الأمر كان أكثر صعوبة وتطلب أداة خاصة قدمتها Microsoft لهذا الغرض فقط.

في التشكيل Designer.vb الملف ، ستجد أن الكود أدناه قد تمت إضافته تلقائيًا في المواقع الصحيحة لدعم مكون CheckBox. (إذا كان لديك إصدار مختلف من Visual Studio ، فقد يكون الرمز مختلفًا قليلاً.) هذا هو الرمز الذي يكتبه Visual Studio لك.

"مطلوب من قبل مكونات Windows Form Designer الخاصة _ باسم System.ComponentModel.IContainer'NOTE: الإجراء التالي مطلوب" بواسطة Windows Form Designer "يمكن تعديله باستخدام Windows Form Designer." لا تقم بتعديله باستخدام محرر التعليمات البرمجية . _Private Sub InitializeComponent () Me.CheckBox1 = System.Windows.Forms.CheckBox () النظام الجديد. Me.SuspendLayout () "CheckBox1 'Me.CheckBox1.AutoSize = True Me.CheckBox1.Location = نظام جديد. ) Me.CheckBox1.Name = "CheckBox1" ... وهكذا دواليك ...

هذا هو الرمز الذي يجب عليك إضافته إلى البرنامج لإنشاء عنصر تحكم مخصص. ضع في اعتبارك أن كافة أساليب وخصائص عنصر التحكم CheckBox الفعلي موجودة في فئة يتم توفيرها بواسطة .NET Framework: System.Windows.Forms.CheckBox. هذا ليس جزءًا من مشروعك لأنه مثبت في Windows لكافة برامج .NET. ولكن هناك قطعة أرض من ذلك.

هناك نقطة أخرى يجب الانتباه إليها وهي أنك إذا كنت تستخدم برنامج WPF (Windows Presentation Foundation) ، فإن فئة .NET CheckBox تأتي من مكتبة مختلفة تمامًا باسم System.Windows.Controls. تعمل هذه المقالة فقط لتطبيق Windows Forms ، لكن مبادئ الوراثة هنا تعمل مع أي مشروع VB.NET.

افترض أن مشروعك يحتاج إلى تحكم يشبه إلى حد كبير أحد عناصر التحكم القياسية. على سبيل المثال ، خانة اختيار غيرت اللون أو عرضت "وجهًا سعيدًا" صغيرًا بدلاً من عرض رسم "التحقق" الصغير. سنقوم ببناء فصل يقوم بذلك وسنوضح لك كيفية إضافته إلى مشروعك. في حين أن هذا قد يكون مفيدًا بحد ذاته ، فإن الهدف الحقيقي هو إظهار VB.NET ميراث.

لنبدأ الترميز

للبدء ، قم بتغيير اسم CheckBox الذي أضفته للتو oldCheckBox. (قد ترغب في إيقاف عرض "إظهار جميع الملفات" مرة أخرى لتبسيط Solution Explorer.) الآن أضف فئة جديدة إلى مشروعك. هناك عدة طرق للقيام بذلك ، بما في ذلك النقر بزر الماوس الأيمن على المشروع في Solution Explorer وتحديد "إضافة" ثم "فئة" أو اختيار "إضافة فئة" ضمن عنصر قائمة المشروع. تغيير اسم ملف الفئة الجديدة إلى newCheckBox للحفاظ على الأمور في نصابها الصحيح. أخيرًا ، افتح نافذة التعليمات البرمجية للفصل وأضف هذا الرمز:

NewCheckBox الفئة العامة يرث CheckBox Private CenterSquareColor As Color = Color.Red المحمي Overrides Sub OnPaint (ByVal pEvent _ As PaintEventArgs) Dim CenterSquare _ As New Rectangle (3، 4، 10، 12) MyBase.OnPaint (pEvent) If Me.Checked Then pEvent.Graphics.FillRectangle (New SolidBrush (CenterSquareColor)، CenterSquare) End If End SubEnd Class

(في هذه المقالة وفي مقالات أخرى على الموقع ، يتم استخدام الكثير من عمليات متابعة الخطوط لإبقاء الخطوط قصيرة بحيث تتناسب مع المساحة المتاحة على صفحة الويب.)

أول شيء يلاحظ حول كود صفك الجديد هو يرث الكلمة. هذا يعني أن جميع خصائص وطرق VB.NET Framework CheckBox هي جزءًا من هذه الخاصية تلقائيًا. لتقدير مقدار العمل الذي يتم توفيره ، يجب أن تحاول برمجة شيء يشبه مكون CheckBox من البداية.

هناك شيئان رئيسيان يجب ملاحظتهما في الكود أعلاه:

الأول هو رمز يستخدم تجاوز لاستبدال السلوك .NET القياسي الذي قد يحدث ل OnPaint هدف. يتم تشغيل حدث OnPaint عندما يلاحظ Windows أنه يجب إعادة إنشاء جزء من الشاشة. مثال على ذلك هو عندما تكتشف نافذة أخرى جزءًا من شاشتك. يقوم Windows بتحديث العرض تلقائيًا ، ولكنه يستدعي حدث OnPaint في الكود. (يتم استدعاء حدث OnPaint أيضًا عند إنشاء النموذج في البداية.) لذلك إذا تجاوزنا OnPaint ، يمكننا تغيير طريقة ظهور الأشياء على الشاشة.

والثاني هو الطريقة التي ينشئ Visual Basic في CheckBox. كلما كان الوالد "محددًا" (أي ، Me.Checked هو صحيح) ثم الكود الجديد الذي نوفره في فصل NewCheckBox سيعيد تلوين مركز CheckBox بدلاً من رسم علامة اختيار.

الباقي هو ما يسمى رمز GDI +. تحدد هذه التعليمة البرمجية مستطيلًا بنفس الحجم تمامًا مثل مركز خانة الاختيار وتلوينه باستخدام مكالمات أسلوب GDI +. تم تحديد "الأرقام السحرية" لوضع المستطيل الأحمر ، "المستطيل (3 ، 4 ، 10 ، 12)" ، بشكل تجريبي. لقد غيرتها حتى بدت صحيحة.

هناك خطوة واحدة مهمة للغاية تريد التأكد من أنك لا تتجاهلها إجراءات التجاوز:

MyBase.OnPaint (pEvent)

التجاوز يعني أن الكود الخاص بك سوف يقدم الكل من رمز لهذا الحدث. ولكن هذا نادرا ما تريد. لذلك VB يوفر وسيلة لتشغيل رمز .NET العادي الذي كان سيتم تنفيذه لحدث ما. هذا هو البيان الذي يفعل ذلك. ينقل نفس المعلمة-pEvent- إلى رمز الحدث الذي كان سيتم تنفيذه إذا لم يتم تجاوزه ، MyBase.OnPaint.

باستخدام التحكم الجديد

نظرًا لأن عنصر التحكم الجديد الخاص بنا غير موجود في صندوق الأدوات لدينا ، فيجب إنشاؤه في النموذج مع رمز. أفضل مكان للقيام بذلك هو في النموذج حمل إجراء الحدث.

افتح نافذة التعليمات البرمجية لإجراء حدث تحميل النموذج وأضف هذا الرمز:

القسم الفرعي الخاص frmCustCtrlEx_Load (مرسل ByVal باسم System.Object ، ByVal e As System.EventArgs) يعالج MyBase.Load Dim customCheckBox باسم new newCheckBox () مع customCheckBox.) Text = "Custom CheckBox" .Left = oldCheckBox.Left .Top = oldCheckBox.Left. + oldCheckBox.Height .Size = حجم جديد (oldCheckBox.Size.Width + 50 ، oldCheckBox.Size.Height) End With Controls.Add (customCheckBox) End Sub

لوضع مربع الاختيار الجديد في النموذج ، استفدنا من حقيقة أن هناك بالفعل خانة واحدة واستخدمنا فقط حجم وموضع ذلك الخيار (تم ضبطه بحيث تناسب خاصية Text). خلاف ذلك سيكون لدينا لرمز الموقف يدويا. عند إضافة MyCheckBox إلى النموذج ، فإننا نضيفه إلى مجموعة عناصر التحكم.

لكن هذا الرمز ليس مرنًا جدًا. على سبيل المثال ، يكون اللون الأحمر مضغوطًا وتغيير اللون يتطلب تغيير البرنامج. قد تحتاج أيضًا إلى رسم بدلاً من علامة اختيار.

إليك فئة CheckBox جديدة ومحسّنة. يوضح لك هذا الرمز كيفية اتخاذ بعض الخطوات التالية نحو البرمجة الموجهة للكائنات VB.NET.

الطبقة العامة betterCheckBox ترث CheckBox Private CenterSquareColor As Color = Color.Blue Private CenterSquareImage As Bitmap Private CenterSquare As New Rectangle (3، 4، 10، 12) Overrides Sub OnPides Sub OnPaint _ (ByVal pEvent As _ System.Windows.Forms.AlgentArgs) .OnPaint (pEvent) If Me.Checked ثم إذا كان CenterSquareImage ليس شيئًا ثم pEvent.Graphics.FillRectangle (SolidBrush جديد (CenterSquareColor) ، CenterSquare) Else pEvent.Graphics.DrawImage (CenterSquareImage ، CenterSquare) ) As Color Get FillColor = CenterSquareColor End Get Set (ByVal Value As Color) CenterSquareColor = Value End Set End End Property Public FillImage () As Bitmap Get FillImage = CenterSquareImage End Get Set (ByVal Value As Bitmap) CenterSquareImage = End Set Set End EndEnd صف دراسي

لماذا إصدار BetterCheckBox أفضل

أحد التحسينات الرئيسية هو إضافة اثنين الخصائص. هذا شيء لم تفعله الطبقة القديمة على الإطلاق.

اثنين من الخصائص الجديدة المقدمة هي

FILLCOLOR

و

FillImage

للتعرف على كيفية عمل ذلك في VB.NET ، جرب هذه التجربة البسيطة. أضف فصلًا إلى مشروع قياسي ، ثم أدخل الرمز:

الممتلكات العامة كل ما تحصل عليه

عندما تضغط على Enter بعد كتابة "Get" ، يملأ VB.NET Intellisense كتلة رمز الملكية بأكملها وكل ما عليك فعله هو رمز تفاصيل مشروعك. (كتل Get و Set غير مطلوبة دائمًا بدءًا من VB.NET 2010 ، لذلك عليك أن تخبر Intellisense هذا على الأقل كثيرًا لبدء تشغيله.)

الملكية العامة أيا كان الحصول على النهاية الحصول على مجموعة (قيمة ByVal) إنهاء خاصية SetEnd

تم الانتهاء من هذه الكتل في الكود أعلاه. الغرض من كتل التعليمات البرمجية هذه هو السماح بالوصول إلى قيم الخصائص من أجزاء أخرى من النظام.

مع إضافة الطرق ، ستكون على الطريق الصحيح لإنشاء مكون كامل. لمشاهدة مثال بسيط جدًا لأحد الأساليب ، أضف هذا الرمز أدناه تعريفات الخصائص في فئة betterCheckBox:

التأكيد العام () Me.Font = New System.Drawing.Font (_ "Microsoft Sans Serif" ، 12.0! ، _ System.Drawing.FontStyle.Bold) Me.Size = New System.Drawing.Size (200، 35) CenterSquare.Offset (CenterSquare.Left - 3، CenterSquare.Top + 3) End Sub

بالإضافة إلى ضبط الخط المعروض في CheckBox ، تقوم هذه الطريقة أيضًا بضبط حجم المربع وموقع المستطيل الذي تم التحقق منه لحساب الحجم الجديد. لاستخدام الطريقة الجديدة ، قم فقط بتدوينها بنفس الطريقة التي تتبعها في أي طريقة:

MyBetterEmphasizedBox.Emphasize ()

تمامًا مثل الخصائص ، يضيف Visual Studio تلقائيًا الطريقة الجديدة إلى Intellisense من Microsoft!

الهدف الرئيسي هنا هو إظهار كيفية ترميز طريقة ما. قد تكون على دراية بأن عنصر التحكم CheckBox القياسي يسمح أيضًا بتغيير الخط ، لذلك لا تضيف هذه الطريقة كثيرًا من الوظائف.

توضح المقالة التالية في هذه السلسلة ، "برمجة عنصر تحكم مخصص لـ VB.NET - ما وراء الأساسيات" ، طريقة تقوم بذلك ، كما توضح كيفية تجاوز طريقة في عنصر تحكم مخصص.