DCSIMG
פוסט תגובה למיקי על MdiChild TopMost. - Bah, Humbug!

Bah, Humbug!

Wear sunscreen...

שטויות

  • Join me

בלוגים שאני קורא

פוסט תגובה למיקי על MdiChild TopMost.

הפוסט הראשון של מיקי התפרץ לדלת פתוחה, וגרם לי להזיז את האחוריים הוירטואלים שלי ולכתוב את הפוסט הזה. מיקי, קודם כל - ברוך הבא למערכת! הפוסט הראשון שלך נראה מבטיח, ואני בטוח שגם הבאים אחריו לא יכזיבו!

לעניין הMDI - לפני מספר חודשים פרויקט בארגון שלח לי קריאה דומה; רצו לאפשר לאחד הChilds להיות מעל כל האחרים. הפתרון (המהיר ביותר.. הן במימוש והן במציאתו), כמו שמיקי הזכיר - הגדרת הHost של הChild בתוך הParent נעשית ע"י SetParent.

אלא שכאן ישנן כמה נקודות שחשוב לדעת:

  1. האירוח הזה הוא לא MDI. המשמעות היא שעזרים שונים (כמו DevExpress xtraTabbedMdiManager או כל פקד אחר...) - לא יעבדו. הסיבה היא שהטופס הוא לא MDI. הוא פשוט מתארח בתוך Host שאינו ברירת המחדל. ניתן באותה מידה לייצר כפתור, ולקחת את הbutton1.Handle וכך להציג את הטופס בתוך הכפתור. זה ייתן את אותה תוצאה.
  2. שימו לב שכן יש לשייך MdiParent עבור הChild! אחרת, אתם לא תקבלו Events דוגמת MdiChildActivate, הטופס לא ידע שהוא צריך להתנהג כילד של טופס אחר (לדוגמא, תגלו שאתם יכולים להזיז אותו למרות שהוא WindowState.Maximized) ותגלו תופעות מרגיזות אחרות כשתנסו להנות מדברים שטפסי MDI יודעים לתת (כמו Collapsing, Sorting וכו').
  3. מ1 נובע בין היתר, שאין קשר בין הSetParent לבין הTopMost שהטופס מממש. הבעיה שמתכתחילה הביאה את מיקי לכתוב את הפוסט, היא שTopMost לא עובד כאשר לטופס מוגדר MdiParent. הTopMost לא יעבוד גם כאן... ואם אתם תרצו להחליף בין טפסים וכו' - צפויה לכם בעיה. (זה פתיר.. אבל.. הפתרון לא לגמרי טריוויאלי).
  4. במידה וישנם גם טפסים שלא שויכו כך לטופס הParent, הם יתנהגו וייראו אחרת מאלו שכן הוגדרו כך.
  5. הטופס יהיה גם מעל פקדים אחרים בתוך הMDI (לדוגמא - פסי הגלילה שנוצרים כאשר ישנם טפסים חבויים בMDI). בכלל, זה אחד השירותים שהטפסים האלו לא יקבלו בכלל.
שלח תגובה

(שדה חובה)  

(שדה חובה)  

(אופציונלי)

(שדה חובה) 

Please add 6 and 3 and type the answer here:


Enter the numbers above: