משיב מוביל
מתכנת מתחיל מאד... איך מקבלים ערך מאירוע?

שאלה
-
שלום!
אני בקורס WPF כמבוא ל.NET,
ירוק כדשא, אם זה לא המקום אל נא תסקלוני, רק אימרו בבקשה ואלך לי.
קבלנו שיעורי בית לכתוב שולה מוקשים.
אני רוצה להציג למשתמש מסך פתיחה שבו יוזן שם ורמת משחק רצויה
ובלחיצה על כפתור "אישור" המסך יסגר, ותופעל פונקציה (אירוע) שתיצור לי אובייקט.
כדי ליצור אובייקט צריך שני תנאים שאינני מצליח ליצור...
א. הוא צריך לחיות מחוץ לסקופ של הפונקציה. (ולשם כך אני רוצה לתת את הפוקציה עצמה בתור RETURN לאובייקט ולא VOID או לפחות לתת לה פרמטר שהוא OUT). וזה אינני מצליח כלל.
ב. אין לי מושג איך מעבירים פרמטרים לאירוע...
דוגמה:
Player player = new Player(name.Text, level);// שני סטרינגים שמועברים כפרמטרים לקונסטרקטר
אני רוצה שבלחיצה על כפתור יופעל הקונסטרקטור הזה, ויסגר החלון הנוכחי.
היש למישהו אפשרות לתת לי כיוון?
תודה רבה!
- הועבר על-ידי Eran Sharvit יום ראשון 05 אוקטובר 2014 11:19
תשובות
-
שלום!
אני בקורס WPF כמבוא ל.NET,
נשמע לי מאוד לא הגיוני. כיצד תת טכנולוגיה או סוג של פרויקט ספציפי יכול להיות מבוא לטכנולוגיה עצמה. קודם צריך ללמוד מבוא לדוט.נט ורק אז מתמקצעים בכיוון שמתאים לך. כך למשל אפשרת להתמקצע ב WPF.. ז"א יכול להיות קורס דוט-נט כמבוא ל WPF, אבל לא WPF כמבוא לדוט-נט... טוב אולי זה רק סמנטיקה ומערבבים אצלכם מבוא לדוט-נט ביחד עם מבוא ל WPF... קצת נשמע לי בלאגן.
אני למשל לא מבין ב WPF אבל כן בדוט נט, ולכן אני יכול לעזור בשאלות ב WPF למרות שלא פיתחתי שום אפליקציה מסוג זה. השפה היא C# וזה כמובן זהה. הטכנולוגיה היא דוט-נט, וזה כמובן זהה. הייחודיות של פרוייקט אחד על פרוייקט אחר זה רק התבנית שמישהו הכין לך, והסתיר את הקוד תחת המילה WPF או ASP.NET או CONSOLE וכו'. כמובן בשאלות ספציות הקשורות למשל לקונטרולים אז מי שמכיר את הקונטרולים המסויימים האלו יהיה לו יותר קל (להכיר את הקונטרול זה אומר להכיר את השימוש במובנה בו ואת הקוד שלו כדי לעקוף את ההתנהגות המובנה שלו כשרוצים).
השאלה שלך היא דוגמה לכך, "קונטרולים" בפיתוח אלו בסך הכל מימושים וירטואליים לקודים. הקונטרולים זה מושג הקיים למשל ב WPF וקשור ל GUI. לדעתי מבוא לדוט-נט צריך ללמד בעזרת אפלקציה CONSOLE שהיא הכי נקייה..למרות שאני מבין את הגישה ואני לא חולק עליה (רצון להגיע לתוצאה ניראית בצורה מהירה).
ירוק כדשא, אם זה לא המקום אל נא תסקלוני, רק אימרו בבקשה ואלך לי.
ירוק בדשא?!?
ירוק זה בדרך כלל מסמל מתחיל, אבל בדשא זה אומר שאתה גנן מקצועי מאוד! אצלנו בבית יש כתמים חומים (ז"א רואים אדמה בכמה מקומות), רק גננים מקצועים מצחקים להיות ירוקים בדשא :-)
קבלנו שיעורי בית לכתוב שולה מוקשים.
אני רוצה להציג למשתמש מסך פתיחה שבו יוזן שם ורמת משחק רצויה
ובלחיצה על כפתור "אישור" המסך יסגר, ותופעל פונקציה (אירוע) שתיצור לי אובייקט.
כדי ליצור אובייקט צריך שני תנאים שאינני מצליח ליצור...
כפתורים הם קונטרולים לצורך הgניין שכבר מובנה בהם (יותר מדוייק להגידד מובנה במחלקה שלהם) אירוע של לחיצה. אתה יכול לנצל את האירוע הזה ולא להמציא את הגלגל :-)
א. הוא צריך לחיות מחוץ לסקופ של הפונקציה. (ולשם כך אני רוצה לתת את הפוקציה עצמה בתור RETURN לאובייקט ולא VOID או לפחות לתת לה פרמטר שהוא OUT). וזה אינני מצליח כלל.
ב. אין לי מושג איך מעבירים פרמטרים לאירוע...
יצירת אירוע זה חומר יחסית מתקדם בשלבי הלימוד. אירוע מבוסס על אלמנט בשם delegate ובו אנחנו מגידירים את הפרמטרים (את התבנית אם רוצים להגיד בצורה עממית קצת) כפי שאתה מתכוון.
בקישורים הבאים יש לך דוגמה מלאה של יצירת אירוע. עבור על שני הקישורים. כל קישור נותן דוגמה אחרת.
http://msdn.microsoft.com/en-us/library/edzehd2t(v=vs.110).aspx
http://msdn.microsoft.com/en-us/library/aa645739(v=vs.71).aspx
שים לב לשלבים המרכזיים ביצירת אירוע:
- הגדרת delegate (כאן אתה יכול להגדיר איזה אלמנט שאתה רוצה)
- אם אתה רוצה אז אתה יכול להגדיר מחלקה שלך עבור ה delegate ובמחלקה הזו להגידר כמה פרמטרים שאתה רוצה.
- במחלקה שממנה אתה רוצה לייצר מופעים של אובייקטים (המחלקה של הכפתור במקרה שלך) אתה צריך להגדיר את המטפל באירוע (Event Handler). ה למעשה הגדרת האלמנט "אירוע" עצמו.
- עתה אתה מגדיר מתודה אשר משמשת אותנו להפעלת האירוע. אלו מתודות שיקבלו בדרך כלל את השם של On ושם מטפל האירוע. במקרה של כפתור למשל אז יש לנו הגדרה של OnClick.
- במחלקה זו אתה גם יכול לקרוא למתודה של הפעלת האירוע בכל מקום שאתה רוצה (למשל בכל מתודה אחרת). זה המקום בו אתה מעביר את הפרמטרים כמו בכל מתודה שמריצים.
מה שיקרה זה בכל פעם שמתודה כלשהיא שהוגדרת בה הפעלת האירוע רצה ויופעל האירוע.
דוגמה:
Player player = new Player(name.Text, level);// שני סטרינגים שמועברים כפרמטרים לקונסטרקטר
אני רוצה שבלחיצה על כפתור יופעל הקונסטרקטור הזה, ויסגר החלון הנוכחי.
היש למישהו אפשרות לתת לי כיוון?
תודה רבה!
אם אתה רוצה להעביר פרמטרים רבים אתה יכול להעזר בדוגמה כאן:
http://stackoverflow.com/questions/14058412/passing-parameter-to-an-event-handler
[Personal Site] [Blog] [Facebook]
- הוצע כתשובה על-ידי Eran Sharvit יום שלישי 07 אוקטובר 2014 09:16
- סומן כתשובה על-ידי Eran Sharvit יום ראשון 12 אוקטובר 2014 15:39
-
שלום!
תודה על כל התגובות!
בכיף :-)
אני לפחות מנסה לעזור גם אם לא תמיד זה מצליח :-)חלקן לא הבנתי כנראה עוד איני ברמה המספקת. ובעיקר כי לצערי אינני דובר אנגלית רק זו של גוגל טרנסלייט... (אני יודע שזה חשוב מאד, אכן, אבל זה ייקח זמן) ואני מנסה ללמוד לאיטי ההערות והתגובות. ואקווה להחכים הרבה מזה.
אין שום אפשרות לעבוד בפיתוח ללא יכולת לקרוא אנגלית מקצועית, אבל זה תהליך שהוא חלק מהלימוד הטכני ועם הזמן תגלה שגם האנגלית שלך משתפרת מעט, ואתה לומד לעבו עם התרגום של גוגל מהר יותר במקביל :-)
רק שתי הערות:
א. הWPF משמש כמבוא כללי לתכנות כדי לתת תחשוה של משהו עובד, ולא כמבוא טכני לתשתית הדוט נט.
ברור, זה מה שכתבתי שבדרך כלל חברות עושות. זה לא מועיל ללימוד טוב יותר, אבל מועיל להרגשה והרגשה טובה מובילה לפעמים ללימוד עם מוטיבציה גבוהה יותר. אני לא פוסל את השיטה באופן גורף.
ב. בשל תקלה מוזרה כבר כמה ימים כרום לא הסקים לפתוח לי אתר זה, ואילו אינטרנט אקספלורר פתח אך התגובה שכתבתי לא נתקבלה.
אז אמסור לפניכם מודעה: אם איני מגיב או מודה על תגובות, זה לא בגלל שאני כפוי טובה אלא בשל בעיה טכנית. ותודה מראש!
אליעזר א
תודה על הערה זו.
אני עובד עם כרום דרך אגב תמיד. אני ממלית לנקודת היסטוריה אם יש בעיה ctrl+shift+delete ולעבוד עם הגרסה החדשה ביותר (היו לי בעיות באחת הגרסאות הקודמות גם כן). אני עובד עם גרסת כרום ללא התקנה בכלל ואני חושב שזו שיטה מעולה http://portableapps.com
אם עולה שאלה נוספת או שאלת המשך, אנא אל תתבייש לשאול (אתה יכול לפתוח הודעה חדשה). וכמובן תנסה לתת לנו כמה שיותר אינפורמציה כולל קודים הקשורים לשאלה (בצורה מסוכמת בתוכן ההודעה או מצוף) ואם אפשר את הפרויקט לדוגמה, להורדה.
[Personal Site] [Blog] [Facebook]
- סומן כתשובה על-ידי אליעזר א יום ראשון 12 אוקטובר 2014 21:10
כל התגובות
-
-
שלום!
אני בקורס WPF כמבוא ל.NET,
נשמע לי מאוד לא הגיוני. כיצד תת טכנולוגיה או סוג של פרויקט ספציפי יכול להיות מבוא לטכנולוגיה עצמה. קודם צריך ללמוד מבוא לדוט.נט ורק אז מתמקצעים בכיוון שמתאים לך. כך למשל אפשרת להתמקצע ב WPF.. ז"א יכול להיות קורס דוט-נט כמבוא ל WPF, אבל לא WPF כמבוא לדוט-נט... טוב אולי זה רק סמנטיקה ומערבבים אצלכם מבוא לדוט-נט ביחד עם מבוא ל WPF... קצת נשמע לי בלאגן.
אני למשל לא מבין ב WPF אבל כן בדוט נט, ולכן אני יכול לעזור בשאלות ב WPF למרות שלא פיתחתי שום אפליקציה מסוג זה. השפה היא C# וזה כמובן זהה. הטכנולוגיה היא דוט-נט, וזה כמובן זהה. הייחודיות של פרוייקט אחד על פרוייקט אחר זה רק התבנית שמישהו הכין לך, והסתיר את הקוד תחת המילה WPF או ASP.NET או CONSOLE וכו'. כמובן בשאלות ספציות הקשורות למשל לקונטרולים אז מי שמכיר את הקונטרולים המסויימים האלו יהיה לו יותר קל (להכיר את הקונטרול זה אומר להכיר את השימוש במובנה בו ואת הקוד שלו כדי לעקוף את ההתנהגות המובנה שלו כשרוצים).
השאלה שלך היא דוגמה לכך, "קונטרולים" בפיתוח אלו בסך הכל מימושים וירטואליים לקודים. הקונטרולים זה מושג הקיים למשל ב WPF וקשור ל GUI. לדעתי מבוא לדוט-נט צריך ללמד בעזרת אפלקציה CONSOLE שהיא הכי נקייה..למרות שאני מבין את הגישה ואני לא חולק עליה (רצון להגיע לתוצאה ניראית בצורה מהירה).
ירוק כדשא, אם זה לא המקום אל נא תסקלוני, רק אימרו בבקשה ואלך לי.
ירוק בדשא?!?
ירוק זה בדרך כלל מסמל מתחיל, אבל בדשא זה אומר שאתה גנן מקצועי מאוד! אצלנו בבית יש כתמים חומים (ז"א רואים אדמה בכמה מקומות), רק גננים מקצועים מצחקים להיות ירוקים בדשא :-)
קבלנו שיעורי בית לכתוב שולה מוקשים.
אני רוצה להציג למשתמש מסך פתיחה שבו יוזן שם ורמת משחק רצויה
ובלחיצה על כפתור "אישור" המסך יסגר, ותופעל פונקציה (אירוע) שתיצור לי אובייקט.
כדי ליצור אובייקט צריך שני תנאים שאינני מצליח ליצור...
כפתורים הם קונטרולים לצורך הgניין שכבר מובנה בהם (יותר מדוייק להגידד מובנה במחלקה שלהם) אירוע של לחיצה. אתה יכול לנצל את האירוע הזה ולא להמציא את הגלגל :-)
א. הוא צריך לחיות מחוץ לסקופ של הפונקציה. (ולשם כך אני רוצה לתת את הפוקציה עצמה בתור RETURN לאובייקט ולא VOID או לפחות לתת לה פרמטר שהוא OUT). וזה אינני מצליח כלל.
ב. אין לי מושג איך מעבירים פרמטרים לאירוע...
יצירת אירוע זה חומר יחסית מתקדם בשלבי הלימוד. אירוע מבוסס על אלמנט בשם delegate ובו אנחנו מגידירים את הפרמטרים (את התבנית אם רוצים להגיד בצורה עממית קצת) כפי שאתה מתכוון.
בקישורים הבאים יש לך דוגמה מלאה של יצירת אירוע. עבור על שני הקישורים. כל קישור נותן דוגמה אחרת.
http://msdn.microsoft.com/en-us/library/edzehd2t(v=vs.110).aspx
http://msdn.microsoft.com/en-us/library/aa645739(v=vs.71).aspx
שים לב לשלבים המרכזיים ביצירת אירוע:
- הגדרת delegate (כאן אתה יכול להגדיר איזה אלמנט שאתה רוצה)
- אם אתה רוצה אז אתה יכול להגדיר מחלקה שלך עבור ה delegate ובמחלקה הזו להגידר כמה פרמטרים שאתה רוצה.
- במחלקה שממנה אתה רוצה לייצר מופעים של אובייקטים (המחלקה של הכפתור במקרה שלך) אתה צריך להגדיר את המטפל באירוע (Event Handler). ה למעשה הגדרת האלמנט "אירוע" עצמו.
- עתה אתה מגדיר מתודה אשר משמשת אותנו להפעלת האירוע. אלו מתודות שיקבלו בדרך כלל את השם של On ושם מטפל האירוע. במקרה של כפתור למשל אז יש לנו הגדרה של OnClick.
- במחלקה זו אתה גם יכול לקרוא למתודה של הפעלת האירוע בכל מקום שאתה רוצה (למשל בכל מתודה אחרת). זה המקום בו אתה מעביר את הפרמטרים כמו בכל מתודה שמריצים.
מה שיקרה זה בכל פעם שמתודה כלשהיא שהוגדרת בה הפעלת האירוע רצה ויופעל האירוע.
דוגמה:
Player player = new Player(name.Text, level);// שני סטרינגים שמועברים כפרמטרים לקונסטרקטר
אני רוצה שבלחיצה על כפתור יופעל הקונסטרקטור הזה, ויסגר החלון הנוכחי.
היש למישהו אפשרות לתת לי כיוון?
תודה רבה!
אם אתה רוצה להעביר פרמטרים רבים אתה יכול להעזר בדוגמה כאן:
http://stackoverflow.com/questions/14058412/passing-parameter-to-an-event-handler
[Personal Site] [Blog] [Facebook]
- הוצע כתשובה על-ידי Eran Sharvit יום שלישי 07 אוקטובר 2014 09:16
- סומן כתשובה על-ידי Eran Sharvit יום ראשון 12 אוקטובר 2014 15:39
-
אני מציע לך אבל לחשוב אם אתה רוצה באמת ליצור אירוע שלך. לא ניראה לי שזה היתה הכוונה זה לא הדרך לפתור את הבעיה שאתה מציג.
אתה יכול לעשות שמוש באירוע של לחיצה על הכפתור, שהוא אירוע מובנה במחלקה של הקונטרול. באירוע הזה אתה יכול להריץ כל מתודה. במתודה הו אתה יכול לגשת לכל אלמנט שיש לך ולבדוק את המאפיינים שלו, אתה יכול לפתוח חלון חדש או כל פעולה שאתה רוצה בעקרון. לא ברור לי למה שאתה לא עובד עם האירוע המובנה.
אני מציע שתצרף את הפרוייקט שלך כדי לתת לנו יותר מובן על מה שאתה עושה
[Personal Site] [Blog] [Facebook]
-
שלום!
תודה על כל התגובות!
חלקן לא הבנתי כנראה עוד איני ברמה המספקת. ובעיקר כי לצערי אינני דובר אנגלית רק זו של גוגל טרנסלייט... (אני יודע שזה חשוב מאד, אכן, אבל זה ייקח זמן)
ואני מנסה ללמוד לאיטי ההערות והתגובות. ואקווה להחכים הרבה מזה.
רק שתי הערות:
א. הWPF משמש כמבוא כללי לתכנות כדי לתת תחשוה של משהו עובד, ולא כמבוא טכני לתשתית הדוט נט.
ב. בשל תקלה מוזרה כבר כמה ימים כרום לא הסקים לפתוח לי אתר זה, ואילו אינטרנט אקספלורר פתח אך התגובה שכתבתי לא נתקבלה.
אז אמסור לפניכם מודעה: אם איני מגיב או מודה על תגובות, זה לא בגלל שאני כפוי טובה אלא בשל בעיה טכנית. ותודה מראש!
אליעזר א
-
שלום!
תודה על כל התגובות!
בכיף :-)
אני לפחות מנסה לעזור גם אם לא תמיד זה מצליח :-)חלקן לא הבנתי כנראה עוד איני ברמה המספקת. ובעיקר כי לצערי אינני דובר אנגלית רק זו של גוגל טרנסלייט... (אני יודע שזה חשוב מאד, אכן, אבל זה ייקח זמן) ואני מנסה ללמוד לאיטי ההערות והתגובות. ואקווה להחכים הרבה מזה.
אין שום אפשרות לעבוד בפיתוח ללא יכולת לקרוא אנגלית מקצועית, אבל זה תהליך שהוא חלק מהלימוד הטכני ועם הזמן תגלה שגם האנגלית שלך משתפרת מעט, ואתה לומד לעבו עם התרגום של גוגל מהר יותר במקביל :-)
רק שתי הערות:
א. הWPF משמש כמבוא כללי לתכנות כדי לתת תחשוה של משהו עובד, ולא כמבוא טכני לתשתית הדוט נט.
ברור, זה מה שכתבתי שבדרך כלל חברות עושות. זה לא מועיל ללימוד טוב יותר, אבל מועיל להרגשה והרגשה טובה מובילה לפעמים ללימוד עם מוטיבציה גבוהה יותר. אני לא פוסל את השיטה באופן גורף.
ב. בשל תקלה מוזרה כבר כמה ימים כרום לא הסקים לפתוח לי אתר זה, ואילו אינטרנט אקספלורר פתח אך התגובה שכתבתי לא נתקבלה.
אז אמסור לפניכם מודעה: אם איני מגיב או מודה על תגובות, זה לא בגלל שאני כפוי טובה אלא בשל בעיה טכנית. ותודה מראש!
אליעזר א
תודה על הערה זו.
אני עובד עם כרום דרך אגב תמיד. אני ממלית לנקודת היסטוריה אם יש בעיה ctrl+shift+delete ולעבוד עם הגרסה החדשה ביותר (היו לי בעיות באחת הגרסאות הקודמות גם כן). אני עובד עם גרסת כרום ללא התקנה בכלל ואני חושב שזו שיטה מעולה http://portableapps.com
אם עולה שאלה נוספת או שאלת המשך, אנא אל תתבייש לשאול (אתה יכול לפתוח הודעה חדשה). וכמובן תנסה לתת לנו כמה שיותר אינפורמציה כולל קודים הקשורים לשאלה (בצורה מסוכמת בתוכן ההודעה או מצוף) ואם אפשר את הפרויקט לדוגמה, להורדה.
[Personal Site] [Blog] [Facebook]
- סומן כתשובה על-ידי אליעזר א יום ראשון 12 אוקטובר 2014 21:10