عبارة RaiseEvent

تشغل حدث معرف في مستوى وحدة نمطية داخل نموذج فئة أو مستند.

RaiseEvent eventname[( argumentlist )]

الأجزاء

  • eventname
    مطلوبة. اسم الحدث المراد تشغيله.

  • argumentlist
    اختياري. قائمة محدده بفواصل من المتغيرات، صفائف أو تعبيرات. يجب أن توضع الوسيطة argumentlist محاطة بأقواس. في حالة عدم وجود وسائط يجب حذف الأقواس.

ملاحظات

eventname المطلوب هو اسم حدث معرف ضمن الوحدة النمطية. هو يتبع اصطلاحات تسمية متغير في‬ Visual Basic.

إذا لم يتم تعريف الحدث في الوحدة النمطية التي سيتم رفعه فيها، يظهر خطأ. يوضح جزء التعليمات البرمجية التالي تعريف حدث و الإجراء الذي يظهر فيه الحدث.

' Declare an event at module level.
Event LogonCompleted(ByVal UserName As String)

Sub Logon(ByVal UserName As String)
    ' Raise the event.
    RaiseEvent LogonCompleted(UserName)
End Sub

لا يمكنك استخدام RaiseEvent لرفع الأحداث التي لم يتم تعريفها بشكل صريح في الوحدة النمطية. على سبيل المثال، ترث كل النماذج حدث Click من System.Windows.Forms.Form، هو لا يمكن رفعه باستخدام RaiseEvent في نموذج مشتق. إذا قمت بتعريف حدث Click في نموذج الوحدة النمطية، فإنه يظلل حدث Click الخاص بالنموذج. لايزال بإمكانك استدعاء الحدث Click الخاص بالنموذج عن طريق استدعاء الأسلوب OnClick.

بشكل افتراضي، يرفع الحدث المعرفة في Visual Basic معالجات الأحداث الخاصة به في الترتيب الذي تم تأسيس الاتصالات به. لأن الأحداث يمكن أن يكون لها معلمات ByRef , قد تتلقى عملية تتصل متأخره بمعلمات تم تغييرها بواسطة معالج أحداث سابق. بعد أن تنفذ معالجات الأحداث، يتم إرجاع التحكم إلى الروتين الفرعي الذي رفع الحدث.

ملاحظة

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

ملاحظة

يمكنك تغيير السلوك الافتراضي للأحداث بواسطة تعريف حدث مخصص. من أجل الأحداث مخصصة، العبارة RaiseEvent تستدعي ملحق RaiseEvent الخاص بالحدث. لمزيد من المعلومات عن الأحداث المخصصة، راجع كشف الحدث.

مثال

يستخدم المثال التالي الأحداث لحساب ثواني من 10 إلى 0. توضح التعليمات البرمجية العديد من أساليب الأحداث ذات الصلة، خصائص و عبارات بما في ذلك العبارة RaiseEvent.

الفئة التي ترفع الحدث هي مصدر الحدث والأساليب التي تتم عملية الحدث هي معالجات الأحداث. يمكن أن يكون لمصدر الحدث عدة معالجات لأحداث يقوم بإنشائها. عندما ترفع الفئة حدث، يرفع ذلك الحدث في كل فئة تم انتخابها لمعالجة أحداث لمثيل الكائن ذاك.

يستخدم المثال أيضاً نموذج (Form1) مع زر (Button1) ومربع نص (TextBox1). عند النقر فوق الزر يعرض مربع النص الأول عد تنازلي من 10 إلى 0 ثواني. عندما ينقضي كامل الوقت (10 ثوان)، مربع النص الأول يعرض "Done".

تعليمات برمجية لـ Form1 تحدد حالات النموذج الأولية و النهائية. ويحتوي أيضاً على التعليمات البرمجية التي ستنفذ عندما يتم رفع أحداث.

لاستخدام هذا المثال, افتح مشروع تطبيقات Windows جديد, أضف زر باسم Button1 ومربع نص باسم TextBox1 إلى النموذج الرئيسي المسمى Form1. ثم انقر بزر الماوس الأيمن فوق النموذج و انقر فوق عرض تعليمات برمجية لفتح محرر التعليمات البرمجية.

أضف متغير WithEvents إلى مقطع Declarations للفئة 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 أحداث بنفس الطريقة تمامًا كما يفعل النموذج. للسماح للنموذج بمعالجة الأحداث مباشرة, يمكنك استخدام multithreading. لمزيد من المعلومات، راجع التأشير الترابطي ل Visual Basic و #Visual C.

راجع أيضًا:

المرجع

كشف الحدث

عبارة AddHandler

عبارة RemoveHandler

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

موارد أخرى

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