كشف الحدث
يقوم بتعريف حدث مستخدم - معرّف.
[ <attrlist> ] [ accessmodifier ] _
[ Shared ] [ Shadows ] Event eventname[(parameterlist)] _
[ Implements implementslist ]
' -or-
[ <attrlist> ] [ accessmodifier ] _
[ Shared ] [ Shadows ] Event eventname As delegatename _
[ Implements implementslist ]
' -or-
[ <attrlist> ] [ accessmodifier ] _
[ Shared ] [ Shadows ] Custom Event eventname As delegatename _
[ Implements implementslist ]
[ <attrlist> ] AddHandler(ByVal value As delegatename)
[ statements ]
End AddHandler
[ <attrlist> ] RemoveHandler(ByVal value As delegatename)
[ statements ]
End RemoveHandler
[ <attrlist> ] RaiseEvent(delegatesignature)
[ statements ]
End RaiseEvent
End Event
الأجزاء
جزء |
الوصف |
---|---|
attrlist |
اختياري. قائمة السمات التي يمكن تطبيقها لهذا الحدث. السمات المتعددة تفصل بفواصل. يجب أن تحيط قائمة السمة بأقواس زاوية ("<"و">"). |
accessmodifier |
اختياري. تحديد التعليمة البرمجية التي يمكنها الوصول إلى الحدث. يمكن أن يكون أحد الخيارات التالية:
يمكنك تحديد Protected Friend لتمكين الوصول من تعليمات برمجية في فئة حدث الفئة المشتقة أو نفس تجميع. |
Shared |
اختياري. تحدد أن هذا الحدث ليس إقرانها بمثيل فئة أو بنية معينة. |
Shadows |
اختياري. يشير إلى أن هذا الحدث يعيد تعريف و إخفاء عنصر برمجة مطابق أو مجموعة من العناصر المحملة بشكل زائد في الفئة الأساسية. يمكنك تظليل أي نوع من عناصر معرفه مع أي نوع أخر. العنصر المظلل يكون غير متوفر من خلال الفئة المشتقه التي تظلله، ماعدا من حيث يكون العنصر الذي يظلله غير قادر على الوصول. على سبيل المثال، إذا كان Private يظلل فئة عنصر الأساس، تعليمات برمجية التي ليس لديها الإذن للوصول إلى عنصر الوصول Private إلى عنصر الفئة الأساسية بدلاً من ذلك. |
eventname |
مطلوبة. اسم الحدث; يتبع اصطلاحات تسمية المتغيرات القياسية. |
parameterlist |
اختياري. قائمة المتغيرات المحلية التي تمثل معلمات هذا حدث. يجب إحاطة قائمة المعلمة بأقواس. |
Implements |
اختياري. الإشارة إلى هذا الحدث يقوم بتطبيق واجهة حدث. |
implementslist |
مطلوب إذا كان Implements يتم توفيره. قائمة منSub الإجراءات التي يتم تطبيقها. يتم فصل الإجراءات المتعددة بنقطتين. implementedprocedure , implementedprocedure ... ] كل implementedprocedure يحتوي على بناء الجملة والأجزاء التالية: interface.definedname
جزءالوصف
interface مطلوبة.تطبيق اسم الواجهة الخاصة يتضمن هذا إجراء فئة أو بنية.
definedname مطلوبة.اسم حيث يتم تعريف الإجراء في interface.ليس لدى هذا إلى نفسه name، الاسم الذي يستخدمه هذا إجراء إلى تنفيذ إجراء المعرفة.
|
Custom |
مطلوبة. الأحداث التي تم تعريفها كـ Custom يجب تعريف مخصص AddHandler, RemoveHandler، و RaiseEvent accessors. |
delegatename |
اختياري. اسم المفوض تعيين حدث-معالج توقيع. |
AddHandler |
مطلوبة. يقوم بتعريف أسلوب استرجاع القيمة AddHandler التي تحدد عبارات عند لتنفيذ حدث تمت إضافة معالج إما بوضوح عن طريق استخدام عبارة AddHandler أو ضمنياً باستخدام جملة Handles . |
End AddHandler |
مطلوبة. ينهي مقطع AddHandler. |
value |
مطلوبة. اسم المُعامِل |
RemoveHandler |
مطلوبة. يقوم بتعريف أسلوب استرجاع القيمة RemoveHandler التي تحدد العبارات للتنفيذ عند إزالة معالج الأحداث باستخدام عبارة RemoveHandler . |
End RemoveHandler |
مطلوبة. ينهي مقطع RemoveHandler. |
RaiseEvent |
مطلوبة. يقوم بتعريف أسلوب استرجاع القيمة RaiseEvent التي تحدد في العبارات إلى تنفيذه عند تشغيل حدث باستخدام العبارة RaiseEvent . بشكل عام، هذا استدعاء قائمة التفويضات بالاحتفاظ AddHandler و أسلوب استرجاع القيمة RemoveHandler . |
End RaiseEvent |
مطلوبة. ينهي مقطع RaiseEvent. |
delegatesignature |
مطلوبة. قائمة معلمات يطابق المعلمات المطلوبة بواسطة تفويض delegatename . يجب إحاطة قائمة المعلمة بأقواس. |
statements |
اختياري. العبارات التي تحتوي على النصوص AddHandler, RemoveHandler، و أساليب RaiseEvent . |
End Event |
مطلوبة. ينهي مقطع Event. |
ملاحظات
بمجرد ما يتم التصريح عن حدث، استخدم عبارةRaiseEvent لرفع الحدث. قد يكون تم تعريف حدث نموذجي ثم رفعها كما هو موضح في الأجزاء التالية:
Public Class EventSource
' Declare an event.
Public Event LogonCompleted(ByVal UserName As String)
Sub CauseEvent()
' Raise an event on successful logon.
RaiseEvent LogonCompleted("AustinSteele")
End Sub
End Class
ملاحظة
يمكن تعريف الوسائط حدث تماماً كما تفعل وسيطات الإجراءات مع الاستثناءات التالية: لا يمكن تسمية أحداث الوسيطات وسائط ParamArray ، أو وسائط Optional . أحداث ليس لديها قيم الإرجاع.
لمعالجة حدث ما الذي يجب إقرانه مع معالج الأحداث روتين فرعي باستخدام إما Handles أو عبارة AddHandler . تواقيع الروتين الفرعي و الحدث يجب أن تتطابق. لمعالجة حدث مشترك, يجب عليك استخدام العبارة AddHandler .
يمكنك استخدام Event فقط عند مستوى الوحدة النمطية. وهذا يعني تعريف السياق لمتغير يجب أن يكون فئة, بنية, وحدة نمطية، إجراء أو مقطع و لا يمكن أن يكون ملف المصدر، مساحة الاسم, أو واجهة. لمزيد من المعلومات، راجع سياقات الـتعريف و مستويات الوصول الافتراضية.
في معظم الحالات، يمكنك استخدام بناء الجملة أول في مقطع بناء الجملة من هذا الموضوع للتصريح عن الأحداث. ومع ذلك، تتطلب بعض السيناريوهات يكون عندك أكثر من عنصر تحكم عبر سلوك حدث مفصل. بناء الجملة الأخيرة في مقطع بناء الجملة في هذا الموضوع ، والذي يستخدم الكلمة الأساسية Custom التي تتحكم عن طريق تمكينك من تعريف الأحداث المخصصة. في حدث مخصص حدد بالضبط ما الذي يحدث عند إضافة تعليمات برمجية أو إزالتهم معالج أحداث إلى أو من الحدث أو عند رفع رمز الحدث. للحصول على أمثلة أخرى، انظر كيفية القيام بما يلي: إعلان عن أحداث العادية لحفظ الذاكرة و كيفية القيام بما يلي: الإعلان عن أحداث مخصصة لتجنب الحظر.
مثال
يستخدم المثال التالي الأحداث لحساب ثواني من 10 إلى 0. التعليمات البرمجية توضح العديد من الأحداث ذات الصلة بالأساليب و خصائص العبارات. يتضمن هذا عبارة RaiseEvent .
الفئة التي ترفع الحدث هي مصدر الحدث والأساليب التي تتم عملية الحدث هي معالجات الأحداث. يمكن أن يكون لمصدر الحدث عدة معالجات لأحداث يقوم بإنشائها. عندما ترفع الفئة حدث، يرفع ذلك الحدث في كل فئة تم انتخابها لمعالجة أحداث لمثيل الكائن ذاك.
يستخدم المثال أيضاً نموذج (Form1) مع زر (Button1) ومربع نص (TextBox1). عند النقر فوق الزر يعرض مربع النص الأول عد تنازلي من 10 إلى 0 ثواني. عندما ينقضي كامل الوقت (10 ثوان)، مربع النص الأول يعرض "Done".
تعليمات برمجية لـ Form1 تحدد حالات النموذج الأولية و النهائية. ويحتوي أيضاً على التعليمات البرمجية التي ستنفذ عندما يتم رفع أحداث.
لاستخدام هذا المثال, افتح مشروع جديد Windows Forms. قم بإضافة زر باسم Button1 كما يسمى مربع نص TextBox1 إلى نموذج رئيسي المسمى Form1. ثم انقر على يمين النموذج ثم انقر فوق عرض تعليمات برمجية لفتح محرر التعليمات البرمجية.
أضف متغير WithEvents إلى مقطع التعريفات فئة Form1 :
Private WithEvents mText As TimerState
قم بإضافة التعليمات البرمجية التالية إلى التعليمات البرمجية لـForm1 . استبدال أي إجراءات مكررة قد تكون موجودة، مثل Form_Load أو Button_Click.
Private Sub Form1_Load() Handles MyBase.Load
Button1.Text = "Start"
mText = New TimerState
End Sub
Private Sub Button1_Click() Handles Button1.Click
mText.StartCountdown(10.0, 0.1)
End Sub
Private Sub mText_ChangeText() Handles mText.Finished
TextBox1.Text = "Done"
End Sub
Private Sub mText_UpdateTime(ByVal Countdown As Double
) Handles mText.UpdateTime
TextBox1.Text = Format(Countdown, "##0.0")
' Use DoEvents to allow the display to refresh.
My.Application.DoEvents()
End Sub
Class TimerState
Public Event UpdateTime(ByVal Countdown As Double)
Public Event Finished()
Public Sub StartCountdown(ByVal Duration As Double,
ByVal Increment As Double)
Dim Start As Double = DateAndTime.Timer
Dim ElapsedTime As Double = 0
Dim SoFar As Double = 0
Do While ElapsedTime < Duration
If ElapsedTime > SoFar + Increment Then
SoFar += Increment
RaiseEvent UpdateTime(Duration - SoFar)
End If
ElapsedTime = DateAndTime.Timer - Start
Loop
RaiseEvent Finished()
End Sub
End Class
ضغط F5 لتشغيل المثال السابق ثم انقر فوق الزر المسماة يبدأ. يبدأ مربع النص الأول بالعد التنازلي للثواني. عندما ينقضي كامل الوقت (10 ثوان)، مربع النص الأول يعرض "Done".
ملاحظة
الأسلوب My.Application.DoEvents لم يعالج الأحداث بنفس الطريقة التي يقوم بها النموذج. لتمكين نموذج لمعالجة الأحداث مباشرة, يمكنك استخدام متعدد للعمليات. لمزيد من المعلومات، راجع التأشير الترابطي ل Visual Basic و #Visual C.
راجع أيضًا:
المهام
كيفية القيام بما يلي: إعلان عن أحداث العادية لحفظ الذاكرة
كيفية القيام بما يلي: الإعلان عن أحداث مخصصة لتجنب الحظر