www.doronamir.com

E-mail: doron@doronamir.com

 

 

 

 טיפול באירועים ב Windows Application

 

Event sender זה האירוע שמעלה האובייקט אשר מעורר את האירוע.

השגרה המטפלת באירוע זה נקראת Event receiver

ב .net אנו משתמשים ב delegates כדי לקשור בין האובייקט לשיגרת הביצוע .

 

תפקיד ה delegate הינו לקשור בין האובייקט למתודה (Binds events to methods)

ה delegate מחזיק ב reference עבור המתודה אשר תבצע טיפול  (handle) באירוע.

 

Event Handler : המתודה אשר מתבצעת בעת התרחשות האירוע

בדוגמה הנ"ל המתודה  button1_Click מתבצעת כאשר האירוע click של Button1 or Button2

מתרחש

 

this.button1.Click += new System.EventHandler(this.button1_Click);

this.button2.Click += new System.EventHandler(this.button1_Click);

 

private void button1_Click(object sender, System.EventArgs e)

        {

       

        }

המתודה button1_Click  מקבלת 2 פרמטרים sender המכיל ה reference של האובייקט אשר יזם את האירוע

והפרמטר השני e מקבל את מידע נוסף הדרוש לטיפול באירוע .

 

ניתן להוסיף ( להעמיס ) על אירוע מסויים הפנייה למתודה בזמן הרצה כלומר אם אנו מעוניים שבזמן הרצה

פקד מסויים יבצע קריאה למתודות נוספות ניתן להשתמש במבנה הבקוד הנ"ל .

 this.button2.Click += new System.EventHandler(this.button1_Click);

 

לדוגמה :

בתכנית הנ"ל יש 4 פקדים , הפקדים 1-3 מעלים הודעת שלום לפי שם הפקד , הפקד הרביעי מעמיס על הפקד השני לבצע עוד שני מתודות

אחת של פקד 1 והשנייה של פקד 3 .

 

לפני העמסה כל פקד מעלה הודעה רגילה אחת 

  

 

אחרי לחיצה על פקד 4

פקד 2 קיבל לטפל בעוד 2 מתודות של פקד 1 ופקד 3

לכן אחרי לחיצה על פקד 2 נקבל 3 הודעות,  2 עבור פקד1 ,עבור פקד 3 ואחת עבור הפקד 2 עצמו.

התוצאה עבור לחיצה אחת על פקד 2:

  

 

 

קוד התכנית :

private void button1_Click(object sender, System.EventArgs e)

        {

            MessageBox.Show("Hello From Button1");

        }

 

        private void button2_Click(object sender, System.EventArgs e)

        {

            MessageBox.Show("Hello From Button2");

        }

 

        private void button3_Click(object sender, System.EventArgs e)

        {

            MessageBox.Show(" Hello From Button3");

       

        }

//פקד 4 מבצע העמסת קריאות בזמן הרצה לפקד 2

        private void button4_Click(object sender, System.EventArgs e)

        {

            this.button2.Click += new System.EventHandler(this.button1_Click);

            this.button2.Click += new System.EventHandler(this.button3_Click);

        }

 

אפשר להוסיף פקד נוסף המבטל את העמסת האירועים על פקד 2

קוד הסרת טיפול באירוע נראה כך:

 

    private void button5_Click(object sender, System.EventArgs e)

        {

            this.button2.Click -= new System.EventHandler(this.button1_Click);

            this.button2.Click -= new System.EventHandler(this.button3_Click);

        }