מתחיל בc# וwpf שליחת נתונים לפונקציה או הפעלת פונקציה מחלקה
-
שלום!
התחלתי ללמוד סי שארפ וקבלנו שיעורי בית לכתוב שולה מוקשים.יצרתי מחלקות לשחקן ללוח ולכפתור. וכן אינום של רמות.
הכל יפה וטוב.
דע עקא...
אין לי מושג כיצד לנהל את זרימת התוכנית.חשבתי לעשות כך:
א. מסך פתיחה- מקבל רמה רצויה ושם.
מאתחל שחקן חדש. ויותר לוח ומוקשים בהתאם לרמה שנדרשת.אבל...
אני מציג מסך. ורוצה לעצור עד שיתקבל אירוע קליק. כמו prompt בגוואה סקריפט.
אבל אין לי מושג איך.
ושאני מנסה להשתמש באירוע לחיצה זה לא עובד. בגלל שתי סיבות.
א. התוכנה ממשיכה לרוץ ומאתחלת שחקן לא שם ורמה. (וקורסת )
ב. אי אפשר באירוע קליק להעביר נתונים לאלמנט חיצוני. ומה יעזור לי לאתחל שחקן שכל חייו בתוך הסקופ של האירוע?! <!-- s:-( --><img src="{SMILIES_PATH}/icon_e_sad.gif" alt=":-(" title="עצוב" /><!-- s:-( -->אם הייתי יכול לפחות להפעיל ארוע קליק במחלקה הראשית כבר היה עוזר באיזה מידה. אבל גם זה איני מצליח. האירוע מופעל רק במחלקה החופפת לzaxml
תודה רבה!פורסם במקור בפורום CODE613 ב06/10/2014 10:01 (+03:00)
-
ברכות לשלב בו אתה נמצא!
בUI, עצירת תוכנית בד"כ מתבצעת ע"י חלון קלט מודאלי - חלון חדש שא"א לעוזבו בלי ביטול/אישור והתוכנה ממתינה לתשובתו בשביל להמשיך בקוד. פעולה זו מושגת ע"י הרצת מתודת ShowDialog לחלון WPF. שים לב שבקוד החלון הנקרא עליך לתת תשובה: DialogResult = true;
התשובה שלי אופיינית לבעיה הספציפית. בהצלחה!
פורסם במקור בפורום CODE613 ב06/10/2014 13:03 (+03:00)
-
תודה על התגובות עד כה.
לצערי הנסיון להגדיר את החלון עם דיאלוג ריזאלט=טרו.
זורק חריג.זה לא הגדרה מותרת...
וזה עיקר הקוד.(וואלקם זה חלון חדש)
public MainWindow() { InitializeComponent(); this.Visibility = Visibility.Hidden; Wellcom wellcom = new Wellcom();//welcom is custom window wellcom.ShowDialog(); wellcom.DialogResult = true; this.wpfPlayer.Text = player.Name; this.level.Text =player.Level.ToString(); this.Visibility = Visibility.Visible; }
תודה רבה
פורסם במקור בפורום CODE613 ב12/10/2014 22:45 (+03:00)
-
תודה!
אקווה לנסות בקרוב ממש.
לגבי השיעורי בית הספציפים האלו. עד שראיתי התשובה כאן כבר נתייאשתי ועשיתי שלmain אין את רוב הניהול.
אלא אחר אתחול התוכנית אין המשך בmain והניהול עובר לאירוע של הלחיצה והוא היוצר אוביקטים ומפעיל אותם...פורסם במקור בפורום CODE613 ב21/10/2014 12:24 (+03:00)
-
זה ENUM בשם DialogResult
שים שם DialogResult.OK
לא. אתה מחליף עם winforms. בwpf זה מאפיין בוליאני (ראה לינק להלן).
תודה על התגובות עד כה.
לצערי הנסיון להגדיר את החלון עם דיאלוג ריזאלט=טרו.
זורק חריג.דקדקתי לכתוב:
@דוד ל.ט.שים לב ש**[u:6ax7yavg]בקוד החלון הנקרא[/u:6ax7yavg]** עליך לתת תשובה: DialogResult = true;
בתוך הקוד של החלון Wellcom אתה צריך להגיב בשלב כל שהוא ולענות לחלון המקור שקרא לחלון הזה (נגיד המשתמש כותב את שמו ולוחץ על הפתור "אישור"). בשלב בו החלון Wellcom "גמר" עם המשתמש וקיבל ממנו תשובה או אי תשובה, הוא מחזיר לחלון המקור במאפיין הזה האם אכן ישנה תשובה רלוונטית.
ברגע שאתה כותב בקוד DialogResult = true; זה סוגר את החלון והקוד הקורא מתעורר מ"קפאונו" וממשיך לרוץ. הוא יכול לבחון את התשובות מהחלון Wellcom ע"י פנייה למאפייניו.הנה תיעוד של המאפיין עם הסבר אף לשתי מקרי השגיאה האפשריים.
אגב בWPF השגיאה תמיד נמצאת בinner exception, לא משנה מה זה ולמה זה ככה, בכל אופן בגירסת הVisual Studio שברשותך א"א לצפות בשגיאת המקור. ממילא אני מאוד ממליץ לך לעבור לVisual Studio Ultimate שהיא "עקרונית" בתשלום, שמה אתה יכול לראות את לשון השגיאה המקורית שבמקרה זה היא: DialogResult is set before a window is opened by calling ShowDialog.
עריכה:
אני טעיתי. לשון ההודעת שגיאה היא: DialogResult can be set only after Window is created and shown as dialog., וזה כאילו המאפיין הוגדר לפני/ללא קריאת הShowDialog. וזה לא נכון, אלא הבעיה היא שהמאפיין נקרא אחרי הClose של הטופס. לשון הודעת השגיאה בטעות לא מכסה את המקרה הזה.פורסם במקור בפורום CODE613 ב21/10/2014 14:52 (+03:00)