الـأحداث (Visual Basic)
بينما قد تتصور مشروع Visual Studio كسلسلة من الإجراءات التي تنفذ في تسلسل, في الحقيقة,معظم البرامج ناتج من حدث — بمعنى تدفق التنفيذ يحدد التكرارات الخارجية التي تسمى أحداث.
الـحدث هو إشارة التي تعلم أحد التطبيقات حدوث شيء هام. على سبيل المثال، عند قيام المستخدم بالنقر فوق عنصر تحكم في نموذج،النموذج يمكن أن يرفع حدث Click و يستدعي إجراء الذي يعالج الحدث. الـأحداث تسمح أيضاً للمهام المنفصلة بالاتصال مع بعض. مثلاً التطبيق الخاص بك ينفذ فرز المهمة بشكل منفصل من التطبيق الرئيسي. إذا ألغى المستخدم الفرز, التطبيق الخاص بك يمكن أن يرسل حدث إلغاء ليأمر عملية الفرز بالتوقف.
مفاهيم و شروط الحدث
يصف هذا القسم الشروط والمفاهيم المستخدمة مع الأحداث في Visual Basic.
تصريح الأحداث
تقوم بـالـإعلان عن الأحداث ضمن فئات و بنيات الوحدات النمطية و الواجهات باستخدام الكلمة الأساسية Event كما في المثال التالي:
Event AnEvent(ByVal EventNumber As Integer)
رفع الأحداث
الـحدث يشبه رسالة للإعلان عن حدوث شيء هام. تسمى عملية بث الرسالة رفع الحدث. Visual Basic، ترفع الأحداث مع كشف RaiseEvent ، كما هو موضح في المثال التالي:
RaiseEvent AnEvent(EventNumber)
يجب أن يتم رفع الأحداث في نطاق الفئة أو الوحدة النمطية أو البنية التي تم فيها تعريف الحدث. على سبيل المثال،الفئة المشتقة لا يمكنها رفع أحداث موروثة من فئة أساسية.
مرسلوا الحدث
أي كائن قادر على رفع حدث هو مرسل الحدث، وااذي يعرف أيضاً باسم مصدر الحدث. النماذج وعناصر التحكم الكائنات المعرفة من قبل المستخدم أمثلة عن مرسلي الحدث.
معالجات الحدث
معالجات الأحداث هي الإجراءات التي تنادى عند حدوث حدث مطابق. يمكنك استخدام أي روتين فرعي صالح بتوقيع مطابق كمعالج الحدث. لا يمكنك استخدام دالة كمعالج الأحداث, على الرغم من ذلك، لأنها لا يمكن أن تقوم بإرجاع قيمة لمصدر الحدث.
Visual Basic يستخدم اصطلاح تسمية قياسي الخاصة بمعالجات الأحداث التي تضم اسم مرسل الحدث, تسطير أسفل السطر (_) واسم الحدث. على سبيل المثال، Click حدث من زر باسم button1 يمكن تسمية Sub button1_Click.
ملاحظة
من المستحسن استخدام اصطلاح التسمية هذا عند تعريف معالجات الحدث لـلحدث الخاصة بك ,لكنه غير مطلوب; يمكنك استخدام أي اسم روتين فرعي صالح.
إقتران لاأحداث مع معالجات الحدث
قبل أن يصبح معالج الأحداث قابلاً للاستخدام, يجب أولاً إقرانه مع حدث باستخدام اما Handles أو AddHandler العبارة.
WithEvents و عبارة المعالجات
كشف WithEvents و جملة Handles توفر طريقة تعريفية لتحديد معالجات الحدث. الحدث المرفوع بواسطة كائن معرف مع الكلمة الأساسية WithEvents يمكن معالجته بواسطة أي إجراء مع كشف Handles لذلك الحدث كما هو موضح في المثال التالي:
' Declare a WithEvents variable.
Dim WithEvents EClass As New EventClass
' Call the method that raises the object's events.
Sub TestEvents()
EClass.RaiseEvents()
End Sub
' Declare an event handler that handles multiple events.
Sub EClass_EventHandler() Handles EClass.XEvent, EClass.YEvent
MsgBox("Received Event.")
End Sub
Class EventClass
Public Event XEvent()
Public Event YEvent()
' RaiseEvents raises both events.
Sub RaiseEvents()
RaiseEvent XEvent()
RaiseEvent YEvent()
End Sub
End Class
كشف WithEvents و جملة Handles غالباً ما تكون أفضل اختيار بالنسبة لمعالجات الأحداث لأن بناء الجملة التعريفي التي يستخدمها يجعل معالجة الحدث أسهل لكتابتها برمجيا و للقراءة و للتصحيح. رغم ذلك، كن على علم من القيود التالية عند استخدام المتغيرات WithEvents:
لا يمكنك استخدام متغير WithEvents كمتغير كائن. أي، يتعذر تعريفها كـ Object— يجب عليك تحديد اسم الفئة عند تعريف المتغير.
Beca استخدم المشتركة أحداث هي لا ترتبط بمثيلات الفئات، لا يمكنك استخدم WithEventsبشكل إلزامي معالجة الأحداث المشتركة. وبشكل مماثل، لا يمكنك استخدام WithEvents أو Handles لمعلجة الأحداث من Structure. في كلا الحالتين، يمكنك استخدام كشف AddHandlerلمعالجة تلك الأحداث.
لا يمكن إنشاء صفائف من متغيرات WithEvents.
متغيرات الـWithEvents تسمح لمعالج حدث واحد لمعالجة نوع أو أكثر من الأحداث أو واحد أو أكثر معالجات الحدث sلمعالجة نفس نوع الحدث.
على الرغم من أن جملة Handles هي الطريقة القياسية لاقتران حدث مع معالج الأحداث ، وهو يقتصر على إقتران الأحداث مع معالجات الأحداث في وقت التحويل البرمجي.
في بعض الحالات، مثل أحداث المقترنة مع النماذج أو عناصر التحكم Visual Basic تلقائياً تخرج خارج معلج احداث فارغ و تقترنها مع حدث. على سبيل المثال، عندما تقوم بالنقر نقرًا مزدوجًا فوق زر أمر التشغيل على نموذج في وضع التصميم، Visual Basic يقوم بإنشاء معالج حدث فارغ و متغير WithEvents لزر الأمر كما في التعليمات البرمجية التالية:
Friend WithEvents Button1 As System.Windows.Forms.Button
Protected Sub Button1_Click() Handles Button1.Click
End Sub
AddHandler و RemoveHandler
كشف AddHandler يشبه جملة Handles في ن كليهما يسمح لك بتعيين معالج أحداث. ومع ذلك، AddHandler، تستخدم مع RemoveHandler، يوفر مرونة أكبر من جملة Handles مما يسمح لك بشكل حيوي بإضافة أو ازالة جملة وتغيير معالج الحدث المقترن بحدث. إذا كنت تريد مالجة أحداث مشتركة أحداث من بنية, يجب عليك استخدام AddHandler.
AddHandler يأخذ وسيطين: اسم الحدث من مرسل حدث مثل عنصر التحكم و تعبير الذي يقيم لتفويض. لا تحتاج إلى تحديد فئة التفويض بشكل واضح عند استخدام AddHandler، بما أن كشف AddressOf دائماً يقوم بإرجاع مرجع إلى التفويض. يقوم المثال التالي بربط معالج الأحداث مع حدث رفع بواسطة كائن:
AddHandler Obj.XEvent, AddressOf Me.XEventHandler
RemoveHandler، الذي يقطع اتصال حدث من معالج الأحداث, يستخدم نفس بناء الجملة كـ AddHandler. فعلى سبيل المثال:
RemoveHandler Obj.XEvent, AddressOf Me.XEventHandler
في المثال التالي معالج الأحداث يرتبط بحدث و يتم رفع الحدث. معالج الأحداث يلتقط الحدث ويعرض رسالة.
ثم يتم ازالة أول معالج أحداث و يتم ربط معالج حدث أخر مع الحدث . عندما يظهر حدث مرة أخرى, يتم عرض رسالة مختلفة.
وأخيراً، معالج الاحداث الثاني يتم ازالتة و يتم اظهار الحدث للمرة الثالثة . لأنه لم تعد هناك معالج حدث مرتبط بحدث ، لم يتم اتخاذ أي إجراء.
Module Module1
Sub Main()
Dim c1 As New Class1
' Associate an event handler with an event.
AddHandler c1.AnEvent, AddressOf EventHandler1
' Call a method to raise the event.
c1.CauseTheEvent()
' Stop handling the event.
RemoveHandler c1.AnEvent, AddressOf EventHandler1
' Now associate a different event handler with the event.
AddHandler c1.AnEvent, AddressOf EventHandler2
' Call a method to raise the event.
c1.CauseTheEvent()
' Stop handling the event.
RemoveHandler c1.AnEvent, AddressOf EventHandler2
' This event will not be handled.
c1.CauseTheEvent()
End Sub
Sub EventHandler1()
' Handle the event.
MsgBox("EventHandler1 caught event.")
End Sub
Sub EventHandler2()
' Handle the event.
MsgBox("EventHandler2 caught event.")
End Sub
Public Class Class1
' Declare an event.
Public Event AnEvent()
Sub CauseTheEvent()
' Raise an event.
RaiseEvent AnEvent()
End Sub
End Class
End Module
معالجة الأحداث موروث من الفئة الأساسية
الفئات المشتقة— الفئات التي ترث سمات الفئة الأساسية — يمكنها معالجة الأحداث المرفوعة بواسطة الفئة الأساسية الخاصة بهم باستخدام HandlesMyBase العبارة.
لمعالجة الأحداث من الفئة الأساسية
قم بـتصريح معالج أحداث في الفئة الشتقة عن طريق إضافة Handles MyBase.eventname الجملة لخط التعريف لإجراء معالج الحدث الخاص بك حيث eventname هو اسم الحدث في الفئة الأساسية التي يتم معالجتها. فعلى سبيل المثال:
Public Class BaseClass Public Event BaseEvent(ByVal i As Integer) ' Place methods and properties here. End Class Public Class DerivedClass Inherits BaseClass Sub EventHandler(ByVal x As Integer) Handles MyBase.BaseEvent ' Place code to handle events from BaseClass here. End Sub End Class
الأقسام ذات الصلة
Title |
الوصف |
---|---|
يـوفر وصف خطوة بخطوة حول كيفية تعريف و رفع أحداث لفئة. |
|
يوضح كيفية كتابة اجراء معالج الحدث. |
|
يوضح كيف يتم تعريف حدث مخصص الذي يسمح لمعالجات الأحداث الخاصة به أن يتم استدعاؤها بشكل غير متزامن. |
|
يوضح كيفية تعريف حدث مخصص الذي يستخدم الذاكرة ففقط عندما يتم معالجة الحدث. |
|
يعرض المشاكل الشائعة التي تنشأ مع معالجات الحدث في المكونات الموروثة. |
|
يـوفر نظرة عامة حول طراز الحدث في .NET Framework. |
|
يـوصف كيفية استخدام الأحداث المرتبطة بـكائنات Windows Forms. |
|
يـوفير نظرة عامة حول التفويضات في Visual Basic. |