הגדרה של 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();
}
ועכשיו לא יראו את המסגרת של טופס הבן אפילו לשבריר שנייה