נושאים פעיליםנושאים פעילים  הצגת רשימה של חברי הפורוםרשימת משתמשים  חיפוש בפורוםחיפוש  עזרהעזרה
  הרשמההרשמה  התחברותהתחברות RSS עדכונים
תיכנות
RSS UnderWarrior Forums : RSS תיכנות
נושא

נושא: עזרה ב- delegate & event

שליחת תגובהשליחת נושא חדש
כותב
הודעה << נושא קודם | נושא הבא >>
רועי
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 22 August 2008 בשעה 14:39 | IP רשוּם
ציטוט רועי

שלום לכולם,

אני הפרט את מה שברצוני לעשות ולאחר מכן את הבעיה.

יש לי UserControl ויש לי Form.
בתוך ה- Form יש לי PanelLayot.
אני מכניס לתווך ה- Panel מספר אובייקטים של ה- UserControl שלי.
 
עד עכשיו המצב בסדר.

אני רוצה שכאשר אני לוחץ על אחד מה- UserControl שנמצאים בתווך הPanel תתבצע איזה שהיא פונקציה שקשורה למחלקה של - FORM.

אם אני לא טועה אפשר לבצע את הפעולה בעזרת Delegate & Event.

אבל אני לא מצליח להבין איפה להגדיר את ה- Delegate ואיך אני רושם פונקציות ל-Event.

תודה מראש לעוזרים.
חזרה לתחילת העמוד הצג את כרטיס החבר של רועי חפש הודעות אחרות של רועי בקר בדף הבית של רועי
 
shoshan
מנהל האתר
מנהל האתר
סמל אישי

הצטרף / הצטרפה: 16 July 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 4637
נשלח בתאריך: 22 August 2008 בשעה 14:53 | IP רשוּם
ציטוט shoshan

דוגמא:

http://msdn.microsoft.com/en-us/library/aa645739(VS.71).aspx


__________________
עד מתי רשעים יעלוזו?

עַל כֵּן אֶמְאַס וְנִחַמְתִּי עַל עָפָר וָאֵפֶר.
חזרה לתחילת העמוד הצג את כרטיס החבר של shoshan חפש הודעות אחרות של shoshan בקר בדף הבית של shoshan
 
רועי
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 22 August 2008 בשעה 17:14 | IP רשוּם
ציטוט רועי

בכול פעם שאני יוצר את ה- USERCONTROL שלי
אני רושם את event של click לפונקציה מסויימת ושאני לוחץ על הכפתור הפונקציה לא מופעלת.

הפונקציה מופעלת כאשר מגיע השורת קוד הזאת
אבל בזמן ריצה שאני לוחץ על הכפתור הפונקציה לא מופעלת.

   mBookControl.pixboxBookpic.Click += BookControlFocusMethod(mBookControl.Book.Name);
חזרה לתחילת העמוד הצג את כרטיס החבר של רועי חפש הודעות אחרות של רועי בקר בדף הבית של רועי
 
shoshan
מנהל האתר
מנהל האתר
סמל אישי

הצטרף / הצטרפה: 16 July 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 4637
נשלח בתאריך: 22 August 2008 בשעה 17:34 | IP רשוּם
ציטוט shoshan

זה כנראה בגלל שאתה לא רושם כרגע משהו שנראה כמו הפונקציה שאתה מתכוון אליה (אתה רושם את mBookControl.Book.Name)

__________________
עד מתי רשעים יעלוזו?

עַל כֵּן אֶמְאַס וְנִחַמְתִּי עַל עָפָר וָאֵפֶר.
חזרה לתחילת העמוד הצג את כרטיס החבר של shoshan חפש הודעות אחרות של shoshan בקר בדף הבית של shoshan
 
רועי
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 22 August 2008 בשעה 17:56 | IP רשוּם
ציטוט רועי

נראה לי שלא הבנתי את השימוש של זה כול כך...

יש לי פונקציה:
 public void BookControlFocusMethod(string BookName)
אני רוצה שהיא תעבוד כשאני לוחץ על כפתור מסויים שנמצא בתווך PanelLayot שנמצא בתווך form מסויים.

אני רוצה להעביר כפרמטר לפונקציה את השם של הכפתור שנלחץ.

הפונקציה כתובה בתוך המחלקה של ה- Form.

אני לא מצליח להבין איך לקשר בין הלחיצה על הפתור לבין הפונקציה...




תודה רבה על העזרה שלך.



חזרה לתחילת העמוד הצג את כרטיס החבר של רועי חפש הודעות אחרות של רועי בקר בדף הבית של רועי
 
shoshan
מנהל האתר
מנהל האתר
סמל אישי

הצטרף / הצטרפה: 16 July 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 4637
נשלח בתאריך: 22 August 2008 בשעה 18:41 | IP רשוּם
ציטוט shoshan

חח...כמו שאמרתי, קצת התבלבלת.

delegate זה לא קריאה לפונקציה עם פרמטרים, הגדרה של סוג חדש שהוא: "מצביע לפונקציה שסוג הפרמטרים אליה ידוע מראש"

לדוגמא הנה הגדרה של delegate שיקבל כפתור שלחצו עליו ופרטי אירוע ולא יחזיר כלום:

קוד:
delegate void ClickDelegate(Button b, EventArgs e);


עכשיו נוכל להגדיר משתנה חדש מסוג ClickDelegate שבטוח או יהיה ריק או יצביע לפונקציה
שמקבלת Button ו-EventArgs ומחזירה void.

קוד:
ClickDelegate cd = new ClickDelegate(f)


כאשר ההגדרה של f צריכה להיות:

קוד:
void f(Button b, EventArgs e)


ועכשיו סוף כל סוף אפשר להירשם לאירוע על ידי הוספת ה-delegate אליו:

קוד:
myButton.OnClick += new ClickDelegate(f)


הכפתור הוא זה שאחראי להעלות את האירוע ובכך לקרוא לכל ה-delegates שנרשמו אליו.


__________________
עד מתי רשעים יעלוזו?

עַל כֵּן אֶמְאַס וְנִחַמְתִּי עַל עָפָר וָאֵפֶר.
חזרה לתחילת העמוד הצג את כרטיס החבר של shoshan חפש הודעות אחרות של shoshan בקר בדף הבית של shoshan
 
רועי
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 22 August 2008 בשעה 19:10 | IP רשוּם
ציטוט רועי

מספר דברים שלא ברורים...
* למה יצרת משתנה מהסוג של ה- Delegate אם אתה לא משתמש בו בשום מקום?

כשנרשמת ל- click עשית את זה עם new  ולא עם המשתנה שיצרת.

?

* בנוסף הפעולה הזאת הינה אפשרית:
myButton.OnClick += new ClickDelegate(f))

הקומפיילר זורק שגיאה שלא ניתן להמיר בין void לבין eventhandler .


הערה קטנה:
הcontrol שלי נוצר בזמן ריצה ולכן אני צריך להירשם ל- event שלו בזמן ריצה לכן הפעולה הזאת אצלי מתרחשת ישר אחרי יצירת ה- control.

חזרה לתחילת העמוד הצג את כרטיס החבר של רועי חפש הודעות אחרות של רועי בקר בדף הבית של רועי
 
רועי
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 22 August 2008 בשעה 21:58 | IP רשוּם
ציטוט רועי

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


חזרה לתחילת העמוד הצג את כרטיס החבר של רועי חפש הודעות אחרות של רועי בקר בדף הבית של רועי
 
shoshan
מנהל האתר
מנהל האתר
סמל אישי

הצטרף / הצטרפה: 16 July 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 4637
נשלח בתאריך: 22 August 2008 בשעה 21:59 | IP רשוּם
ציטוט shoshan

1. כדי שיהיה לך מה לשאול

2. זה בגלל שכבר יש delegate שאותו הכפתור מצפה לקבל, אחרי ה-+= תעשה רווח או
לחלופין תסתכל על הסוג של התכונה OnClick ותראה מה הסוג הזה.

3. אם תשים לב גם כשאתה יותר טפסים עם ה-designer הוא יוצר לך קובץ .designer.cs
   שיש בהם קוד שיוצר "בזמן ריצה" את כל הכפתורים וכו' ונרשם עבורם לאירועים.


__________________
עד מתי רשעים יעלוזו?

עַל כֵּן אֶמְאַס וְנִחַמְתִּי עַל עָפָר וָאֵפֶר.
חזרה לתחילת העמוד הצג את כרטיס החבר של shoshan חפש הודעות אחרות של shoshan בקר בדף הבית של shoshan
 

אם ברצונך להגיב לנושא זה עליך קודם להתחבר
אם אינך רשום/ה כבר עליך להרשם

  שליחת תגובהשליחת נושא חדש
גרסת הדפסה גרסת הדפסה

קפיצה לפורום
אינך יכול/ה לשלוח נושאים חדשים בפורום זה
אינך יכול/ה להגיב לנושאים בפורום זה
אינך יכול/ה למחוק את הודעותיך ותגוביך בפורום זה
אינך יכול/ה לערוך את הודעותיך ותגובותיך בפורום זה
אינך יכול/ה לצור סקרים בפורום זה
אינך יכול/ה להצביע בסקרים בפורום זה