السلام عليكم و رحمة الله و بركاته،
[SIZE=5][SIZE=4]كيف أت[SIZE=4]حكم في ترتيب الـEvent Handlers ؟
أنا ع[SIZE=4]ندي [SIZE=4]في [SIZE=4]المشروع صورة شبيهة بتلك:[/SIZE][/SIZE][/SIZE][/SIZE][/SIZE][/SIZE]
كود :
[SIZE=4]Public Class Class1
Public Event Event1(ByVal e As System.EventArgs)
Protected Sub OnEvent1(ByVal e As System.EventArgs) Handles Me.Event1
MsgBox("Default Protected Handler")
End Sub
Public Sub RaiseEvent1()
RaiseEvent Event1(EventArgs.Empty)
End Sub
End Class
Public Class Class2
Public Sub HandleEvent1(ByRef itsClass As Class1)
AddHandler itsClass.Event1, AddressOf Event1Handler
End Sub
Public Sub Event1Handler(ByVal e As System.EventArgs)
MsgBox("Recently added Handler")
End Sub
End Class
Public Module Module1
Public Sub Main()
Dim myClass1 As New Class1
Dim myClass2 As New Class2
myClass2.HandleEvent1(myClass1)
myClass1.RaiseEvent1()
End
End Sub
End Module[/SIZE]
(المثا[SIZE=4]ل يبدأ بـSub Main و ليس Form1)
[/SIZE]
[SIZE=4]في الكود أعلاه، [SIZE=4]أريد تفعيل [SIZE=4]الـHandler الذي به الرسالة: "Recently added Handler" قبل الـHandler الذي به الرسالة: "Default Protected Handler"[/SIZE][/SIZE]
(مع مراعاة عدم تغيير كود Class1)
[/SIZE]
تحتاج إلى إضافة حدث إضافي إلى Class1 وليكن BeforeEvent1 عندها يمكنك إطلاقه قبل الحدث Event1 وبالتالي تشغيل جميع Handlers المطلوبة قبل تنفيذ الحدث Event1
كود :
Public Sub RaiseEvent1()
RaiseEvent BeforeEvent1(EventArgs.Empty)
RaiseEvent Event1(EventArgs.Empty)
End Sub
غير هذه الطريقة لايمكن تنفيذ ما طلبت إذ أنك قد كسرت تمامًا الهدف الرئيسي من Events.
Islam Ibrahim كتب :تحتاج إلى إضافة حدث إضافي إلى Class1 وليكن BeforeEvent1 عندها يمكنك إطلاقه قبل الحدث Event1 وبالتالي تشغيل جميع Handlers المطلوبة قبل تنفيذ الحدث Event1
كود :
Public Sub RaiseEvent1()
RaiseEvent BeforeEvent1(EventArgs.Empty)
RaiseEvent Event1(EventArgs.Empty)
End Sub
غير هذه الطريقة لايمكن تنفيذ ما طلبت إذ أنك قد كسرت تمامًا الهدف الرئيسي من Events.
شكراً للإفادة أخي، لكن بحكم أنك من خبراء Microsoft فهل توجد أي طريقة للتحايل على هذا و التحكم في ترتيب الـHandlers ؟
(بدون التغيير في Class1)
هناك طريقة وحيدة وهي كتابة فئة جديدة موروثة من الفئة Class1 وعمل Hiding (أو Shadowing) للإجراء OnEvent1 بحيث يتم تغيير ترتيب EventHandlers بشكل ما, لكني لا أفضل هذه الطريقة فهي ستعقد الأمر أكثر.
هل Class1 قابل للتعديل (من كتابتك) أم مضمن في مكتبة خارجية, وإن كان كذلك اعرضه لنرى فقد يكون به إجراءات أخرى مفيدة للغرض الذي تسعى لتحقيقه.
Islam Ibrahim كتب :هناك طريقة وحيدة وهي كتابة فئة جديدة موروثة من الفئة Class1 وعمل Hiding (أو Shadowing) للإجراء OnEvent1 بحيث يتم تغيير ترتيب EventHandlers بشكل ما, لكني لا أفضل هذه الطريقة فهي ستعقد الأمر أكثر.
هل Class1 قابل للتعديل (من كتابتك) أم مضمن في مكتبة خارجية, وإن كان كذلك اعرضه لنرى فقد يكون به إجراءات أخرى مفيدة للغرض الذي تسعى لتحقيقه.
أولاً: شكراً لك أخي فهذه تعتبر الطريقة الأمثل
ثانياً للمعلومة: Class1 هو System.Windows.Forms.Label
ثالثاً: أحب أعتذر عن التأخير في الرد