كشف الحدث

يقوم بتعريف حدث مستخدم - معرّف.

[ <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.

راجع أيضًا:

المهام

كيفية القيام بما يلي: إعلان عن أحداث العادية لحفظ الذاكرة

كيفية القيام بما يلي: الإعلان عن أحداث مخصصة لتجنب الحظر

المرجع

عبارة RaiseEvent

جملة التنفيذ

عبارة AddHandler

عبارة RemoveHandler

عبارة المؤشرات (Visual Basic)

عبارة التفويض

(Visual Basic) المشترك

الظلال (Visual Basic)

موارد أخرى

الـأحداث (Visual Basic)