Page_Load

Page_Load

יש לי בקובץ ה cs :
this.Load += new System.EventHandler(this.Page_Load);​
אני מבין שהפעולה הנ"ל בעצם מקשרת את הפונקציה Page_Load, שבלי הקישור הנ"ל היא פונקציה רגילה לחלוטין, לארוע Load של המסך - כלומר, היא תרוץ כשהמסך יעלה. כמובן שאפשר לשנות את שם הפונקציה לכל דבר אחר, ואת שמה בהתאמה בקישור ה += אז מה זה הארוע OnLoad שיש ל Page ?!
 

gilad g

New member
הוא לא אירוע,

הוא מתודה protected שאתה יכול לעשות לה override. כל מה שהמתודה הזאת עושה זה להקפיץ את האירוע Load. אתה יכול לעשות לה override, וכך לתת לעצמך דרך נוספת לתפוס את האירוע, במקום להסתבך עם הקפצת events.
 
מה ?!

הבנתי ש Load זו פונקציה השיכת למחלקה Page, אבל מה שאני עושה בקוד הקודם הוא לגרום לה להצביע על הפונקציה Page_Load, נכון ? מה הכוונה : "כל מה שהמתודה הזאת עושה זה להקפיץ את האירוע Load" ?
 

yuval k

New member
Load זו לא פונקציה, זה אירוע...

ו-Page_Load משוייכת אליו by-default. יש לך שתי ברירות: אחת מהן היא לדרוס אותה, והשניה - להוסיף לרשימת ה-delegates שנקראים עבור האירוע פונקציה אחרת שלך שמטפלת באירוע.
 
החלטתם לשגע אותי ? ../images/Emo13.gif

אבל כנראה שאני הוא הבעייתי
כתבתי בהודעה המקורית : "יש לי בקובץ ה cs : this.Load += new System.EventHandler(this.Page_Load); אני מבין שהפעולה הנ"ל בעצם מקשרת את הפונקציה Page_Load, שבלי הקישור הנ"ל היא פונקציה רגילה לחלוטין, לארוע Load של המסך - כלומר, היא תרוץ כשהמסך יעלה. כמובן שאפשר לשנות את שם הפונקציה לכל דבר אחר, ואת שמה בהתאמה בקישור ה += אז מה זה הארוע OnLoad שיש ל Page ?!" כלומר, Load היא ארוע של הדף. ואז גלעד אמר שזה לא ארוע... שורה תחתונה : Page.Load זה ארוע של העמוד, שקופץ כאשר הדף נטען. סופי ?
יובל כתב : "Page_Load משוייכת אליו כברירת מחדל" האם זה בעצם מה שאני אמרתי כאן : " this.Load += new System.EventHandler(this.Page_Load); אני מבין שהפעולה הנ"ל בעצם מקשרת את הפונקציה Page_Load, שבלי הקישור הנ"ל היא פונקציה רגילה לחלוטין, לארוע Load של המסך - כלומר, היא תרוץ כשהמסך יעלה" או שהתכוונת למשהו אחר ?
 

gilad g

New member
חחח ../images/Emo13.gif

אתה טיפה מבולבל... בוא נעשה קצת סדר. נפריד בין שלוש ישויות שונות: 1. Load. זהו אירוע לכל דבר, ברמת השפה (public event). הוא מתרחש כשהדף נטען. 2. OnLoad. מתודה protected שאפשר (ואף רצוי, לדעתי) לעשות לה override, ושם לכתוב את מה שצריך לקרות כשהדף נטען. מה שהיא עושה ב-base class שלך, זה רק להקפיץ את Load (האירוע). דוגמא:
protected override void OnLoad(System.EventArgs e) { base.OnLoad(e); //Your stuff here }​
3. Page_Load. שם של פונקציה שמקושרת ל-Load (אירוע, להזכירך
). על השם הזה אתה מחליט. "כלומר, Load היא ארוע של הדף. ואז גלעד אמר שזה לא ארוע... " לא אמרתי דבר כזה
אמרתי ש-OnLoad היא לא אירוע, אבל Load הוא אירוע. אגב, מודל זה של אירוע ששמו X, ומתודה ששמה OnX הוא נפוץ מאוד ברחבי ה-framework
 
בוא נעשה לעצמי מבחן !

ראשית, המון תודה על הסדר שאתה עושה לי בראש
תודה תודה. ע"מ לוודא שאני לא בעננים, אתה יכול בבקשה לקרוא את ההודעה שכתבתי, הפותחת את האשכול (פרט לשורה האחרונה, שהיא בעצם השאלה). התייחסתי שם ל Load ו Page_Load. יש משהו שכתבתי שם, שאינו נכון ? (אני רוצה לבדוק את עצמי
)
 

gilad g

New member
לא...

איך אירוע יכול להקפיץ מתודה, אם לא שויך לשום מתודה אחרת?
 
התכוונתי לכתוב :

במקום :
this.Load += new System.EventHandler(this.Page_Load);​
את זה :
this.Load += new System.EventHandler(this.OnLoad);​
מה אתה אומר ?
 

gilad g

New member
אתה לא יכול

כי OnLoad היא מתודה (כלומר פונקציה), ולא event. מה שכן, אתה יכול לעשות לה override, ובכך "לתפוס" את מתי שה-event אמור לקרות. ה-base class (במקרה שלנו, Page), קורא ל-OnLoad, שמקפיץ את ה-event, לכן אם תעשה לו override, תשיג את אותה תוצאה.
 
אבל גם Page_Load היא פונקציה..

שיטה העבודה אם הבנתי נכון היא, חכתוב פונקציה כלשהי, רגילה, ופשוט לקבוע שהיא תרוץ כאשר הארוע קופץ. ע"י השורה הבאה, אני קובע שהפונקציה Page_Load תרוץ כאשר הארוע Load של ה Page יקפוץ.
this.Load += new System.EventHandler(this.Page_Load);​
אז מדוע אינני יכול לכתוב זאת, כאשר הכוונה היא, כאשר הארוע Load של המסך יקפוץ, אז תפעיל את הפונקציה OnLoa ?
this.Load += new System.EventHandler(this.OnLoad);​
 

gilad g

New member
למה לך לעשות את זה?

זה סתם יכניס אותך ללואה אינסופית, כי OnLoad (כמו שכבר אמרתי) מקפיצה את ה-event ששמו Load.
 
כן, כבר כתבת את זה.. ../images/Emo13.gif

אבל לא הבנתי ממתי מתודה (OnLoad למשל), מקפיצה ארוע (Load למשל). לפי מה שאני מכיר, יש ארועים ויש פונקציות. כאשר ארוע מתרחש, אז אם מקושר אליו פונקציה (=+), כלומרDelegate (אם הארוע מצביע על פונקציה), אז ואתה פונקציה תרוץ. כיצד הגענו למצב שבו הפונקציה OnLoad מקפיצה ארוע ?
 

gilad g

New member
כי זה מה שמופיע בקוד שלה!

ככה מיקרוסופט כתבו אותה, כדי שהיא תקפיץ אתה האירוע.
 
אל תכעס עלי ../images/Emo13.gif ../images/Emo20.gif אני חדש.. ../images/Emo13.gif

זה נכתב אוטומטית בקוד שלי (לא מצאתי זכר לזה..) או שה קורה מאחורי הקלעים ?
 
אז אני צריך לקרוא על הדברים הללו..

זה נשמע לי חשוב מידי מדי לדלג...
יש לך אולי לינק מועיל בנושא ? (מנוע החיפוש של MSDN נותן לי דברים לא קשורים...)
 
למעלה