החלפת forms בתוכנית

HaRmosh

New member
החלפת forms בתוכנית

הכנתי windows application קטנה, כשה-form הראשון שלה הוא login-form. אני רוצה שברגע שילחצו על כפתור בו, הוא ייעלם ויקרא לטופס אחר. הבעיה היא בקוד:
Application.Run(LoginForm); if (.. checking the button... ) { LoginForm.Close(); } NewForm.Show()​
שפשוט סוגר את היישום, כי החלון Login מוגדר כראשי או משהו. איך אני בכל זאת יכול לסגור אותו ולעבור להצגת טופס אחר שיהיה הראשי בתוכנית מבלי לסגור את היישום כולו ? תודה.
 

itaym02

New member
תתחכם מעט

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

סומבודי

New member
תשובה

אם אתה מפעיל טופס באמצעות Application.Run, המתודה ExitThread נרשמת לארוע Closed של הטופס אוטומטית, כך שהטריד שהפעיל את הטופס, שהוא הראשי במקרה זה, מופסק, כך ששום שורה לא תיקרא לאחר Application.Run. כמו כן, לא ניתן להירשם לארוע Closed של הטופס, משום שהפונקציות הנרשמות תיקראנה לאחר ExitThread. אחת הדרכים להתגבר על כך היא להפעיל את הטופס השני בארוע הלחיצה על הכפתור, ורק אז לקרוא ל-Close של הראשון. בצורה כזו, פועל טריד נוסף כשהראשי נסגר, והתכנית אינה נסגרת עד שגם טריד זה נסגר. אפשרות נוספת היא לא להשתמש במתודת Run, אלא Show לטופס המבוקש.
 

HaRmosh

New member
תודה, הסתדרתי (בערך). רק הערה

קטנה - "אחת הדרכים להתגבר על כך היא להפעיל את הטופס השני בארוע הלחיצה על הכפתור, ורק אז לקרוא ל-Close של הראשון" - ניסיתי את זה מזמן, בתור האופציה הכי הגיונית - אבל מסתבר שה-Close של הטופס הראשון, שמקושר עם האפליקציה, סוגר את ה-MessageLoop של התוכנית כולה, ולכן הטופס השני שעשיתי לו show לאחר סגירת הראשון לא מוצג גם הוא, ומתבצעת יציאה מהיישום.
 

itaym02

New member
מן הנימוס שתתן לנו את הפתרון שהגעת

אליו, כדי שגם אנו נלמד.
 

HaRmosh

New member
צודק, יצאתי פיסטוק ../images/Emo13.gif...

מה שעשיתי הוא פשוט Hide ל-form הראשי, ו-show ל-form שבא אחריו. אני לא מבין בזה יותר מדי, אבל אני מקווה שה-form שעשיתי לו hide לא רץ ברקע איכשהו (למרות שלא רואים אותו) ותופס משאבים. הקוד נראה משהו כזה:
this.Hide(); SecondForm f = new SecondForm(); f.Show();​
והקוד הזה נכנס בתוך אירוע לחיצת-כפתור של ה-form הראשי.
 

itaym02

New member
הוא בהחלט רץ ברקע

אבל אני בספק אם הוא תופס הרבה. תנסה את הרעיון הראשון שנתתי לך.
 

HaRmosh

New member
רץ ברקע זה לא טוב...

אני לא מבין אותם, כל הטכנולוגיה המפלצתית הזאת ואין דרך נורמלית סטנדראטית להחליף forms בלי התחכמויות ושטויות ?
 
למעלה