DCSIMG
הגדרה של FormBorderStyle עבור טפסים שהם MDI - שלמה גולדברג (הרב דוטנט)

שלמה גולדברג (הרב דוטנט)

מרצה בסלע ויועץ בעולם ה - net.

הגדרה של FormBorderStyle עבור טפסים שהם MDI

 

בתפוז עלתה השאלה הבאה:
 
יש טופס אב ויוצרים בזמן ריצה מופעים של טפסי בן ומוספים אותם לאב - במקרה שהמאפיין FormBorderStyle מוגדר כ - none על טופס הבן, מה שיקרה בפועל שלשנייה אחת יראו את המסגרת ואז זה יעלם - השאלה כיצד מתפטרים מהמסגרת לתמיד.
 
נניח שהקוד נראה ככה:
 
private void button1_Click(object sender, EventArgs e)
{
    Form2 f = new Form2();
    f.MdiParent = this;
    f.Show();
}
 
למעשה הבעייה נובעת מכך ש - windows מציירת כל הזמן את כל הפקדים שעל המסך - ולכן הדרך היחידה לא לראות את המסגרת היא להגיד למערכת ההפעלה להפסיק לצייר את הטופס עד שהכל יסתדר במקום.
 
כדי לעשות את זה נוכל להשתמש ב - Extension Methods שכתבתי בפוסט השני שלי (כל ההסברים נמצאים שם ולכן כאן אני רק אדגים שימוש בזה)
 
הנה קוד ה - Extension
namespace System.Windows.Forms
{
    public static class ControlExtensions
    {
        [DllImport("user32.dll", CharSet = CharSet.Auto)]
        private static extern IntPtr SendMessage(HandleRef hWnd, int msg, int wParam, int lParam);
 
        public static void BeginUpdate(this Control control)
        {
            SendMessage(new HandleRef(control, control.Handle), 11, 0, 0);
        }
 
        public static void EndUpdate(this Control control)
        {
            SendMessage(new HandleRef(control, control.Handle), 11, -1, 0);
            control.Invalidate(true);
        }
    }
}
 
והנה הקוד השימוש בו
 
private void button1_Click(object sender, EventArgs e)
{
    this.BeginUpdate();
    Form2 f = new Form2();
    f.MdiParent = this;
    f.Show();
    this.EndUpdate();
}
 
ועכשיו לא יראו את המסגרת של טופס הבן אפילו לשבריר שנייה

תוכן התגובה

Shlomo כתב/ה:

כנראה מימוש פנימי שגוי של טפסים שהם בתוך טפסי אב

# November 18, 2009 12:17 PM
שלח תגובה

(שדה חובה)  

(שדה חובה)  

(אופציונלי)

(שדה חובה) 

Please add 7 and 8 and type the answer here:


Enter the numbers above: