קוד חוזר בפתיחה וסגירה של טפסים WinForms
-
יש לי טופס ראשי שממנו נפתחים כמה וכמה טפסים, ובסגירה של כל טופס חוזר להופיע הטופס הראשי.
עשיתי event בכל טופס משנה, שמתפרסם בשעה שטופס המשנה נסגר [אם על ידי כפתור, אם על ידי סגירה ממשית].
ובטופס הראשי לאחר כל פתיחה של טופס משנה, כתבתי כך:private void button1_Click(object sender, EventArgs e) { AllTogether.Form1 h = new AllTogether.Form1(); h.myevent += new Form1.closethisformandshowfather(h_myevent); h.FormClosed += new FormClosedEventHandler(h_myevent); h.Show(); this.Hide(); } void h_myevent(object sourse, EventArgs r) { this.Show(); }
וכמובן בטופס משנה לאחר לחיצה פרסמתי את הארוע.
לאחר חיפוש הבנתי שזו הדרך האופטמלית לנהל סגירה ופתיחה של טפסים מרובים.
הכל עובד היטב, אבל יש כאן יותר מידי קוד שחוזר על עצמו, להצמיד לכל מחלקה ארוע. ההרגשה שלי אומרת שאולי יש איזה ידע שחסר לי בשביל להפוך את הכל לקצר יותר. כי יוצא שאם יש 10 טפסים כאלה, אז לכל אחד מהם לפרסם ארוע וכו' .... האם זה נצרך דווקא בדרך הזו או שיש אי אילו דרכים לקצר וליעל את הקוד?פורסם במקור בפורום CODE613 ב18/08/2016 10:58 (+03:00)
-
לדעתי אתה אמור להשתמש ב ShowDialog וכך כל טופס יוצג בחזית עד שהוא יסגר ולאחר הסגירה החלון הראשי יחזור בצורה אוטומטית להיות בחזית.
בהמשך לזה, תעשה פונקצייה בטופס הראשי שמקבלת את טופס המשנה, ומה שהיא עושה זה:
- להסתיר את הראשי.
- לפתוח את המשנה בדיאלוג כמו שרחמים אמר
- אחרי הסגירה, זה מציג את הראשי שוב. (שלב זה לא ירוץ עד שלא תסגור את הדיאלוג)
ואז פשוט תשלח לפונקצייה את הטופס משנה.
פורסם במקור בפורום CODE613 ב18/08/2016 11:12 (+03:00)
-
תעשה פונקצייה בטופס הראשי שמקבלת את טופס המשנה
רעיון נפלא!
במקרה כאן אני לא יכול להתשמש בShowDialog ולהשאיר את הטופס הראשי פתוח, כי זה משהו שצריך ריכוז מקסימלי של המשתמש וגם זה תופס מקום.
הנה המימוש:public void ShowForm(Form newForm) { this.Hide(); newForm.ShowDialog(); this.Show(); }
אבל בר מן דין, אם זה לא היה ככה שהיה אפשר לסדר את זה, אלא משהו אחר שצריך לרשום לארועים הרבה אובקטים, יש דרך לעשות את זה בקיצור?
פורסם במקור בפורום CODE613 ב18/08/2016 11:30 (+03:00)