添加新 MDI 子项时如何避免屏幕弹跳 Window
How to avoid screen bouncing when adding a new MDI Child Window
在我的 MDI Frame 中,我正在创建 MDI Child Windows,如下所示:
Form frm = new frmMyChild();
frm.MdiParent = this;
frm.WindowState = FormWindowState.Maximized;
frm.Show();
frm.Focus();
到目前为止,这一切正常,但屏幕很快 "bouncing",因为子 windows 被置于 "normal" 状态,然后它们再次最大化。如何预防?
即使将 MenuStrip 添加到 MDI Parent 窗体,Form.MainMenuStrip 仍然是 null
。
当此 属性 为 null
时,MDI child 的系统菜单控件不会 与 MenuStrip(或旧的 MainMenu
混合 ]),因此 child 表单标题栏仍然可见并位于 MenuStrip 上方。
当创建并最大化新的 child 表单时,MenuStrip 弹跳 上下,同时重新创建 child 表单标题。
将 MainMenuStrip
属性 设置为 MDI Parent 的 MenuStrip 的实例,将导致 MDI child 的系统菜单控件变为 blend 与 MenuStrip(或 MainMenu
)。
有趣的是,在 .Net Source Code 中看到这种行为和设计随着时间的推移发生了多少次变化(这只是那里的评论 :)。
TheMDIMenuStrip
是 MDI Parent 的 MenuStrip 在设计时创建并在 InitializeComponent()
中初始化。
public partial class MDIParent : Form
{
public MDIParent()
{
InitializeComponent();
this.MainMenuStrip = this.TheMDIMenuStrip;
this.TheMDIMenuStrip.SendToBack();
}
...
}
之前:
之后:
在我的 MDI Frame 中,我正在创建 MDI Child Windows,如下所示:
Form frm = new frmMyChild();
frm.MdiParent = this;
frm.WindowState = FormWindowState.Maximized;
frm.Show();
frm.Focus();
到目前为止,这一切正常,但屏幕很快 "bouncing",因为子 windows 被置于 "normal" 状态,然后它们再次最大化。如何预防?
即使将 MenuStrip 添加到 MDI Parent 窗体,Form.MainMenuStrip 仍然是 null
。
当此 属性 为 null
时,MDI child 的系统菜单控件不会 与 MenuStrip(或旧的 MainMenu
混合 ]),因此 child 表单标题栏仍然可见并位于 MenuStrip 上方。
当创建并最大化新的 child 表单时,MenuStrip 弹跳 上下,同时重新创建 child 表单标题。
将 MainMenuStrip
属性 设置为 MDI Parent 的 MenuStrip 的实例,将导致 MDI child 的系统菜单控件变为 blend 与 MenuStrip(或 MainMenu
)。
有趣的是,在 .Net Source Code 中看到这种行为和设计随着时间的推移发生了多少次变化(这只是那里的评论 :)。
TheMDIMenuStrip
是 MDI Parent 的 MenuStrip 在设计时创建并在 InitializeComponent()
中初始化。
public partial class MDIParent : Form
{
public MDIParent()
{
InitializeComponent();
this.MainMenuStrip = this.TheMDIMenuStrip;
this.TheMDIMenuStrip.SendToBack();
}
...
}
之前:
之后: