如何避免在添加新的MDI子窗口时出现屏幕跳动

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何避免在添加新的MDI子窗口时出现屏幕跳动相关的知识,希望对你有一定的参考价值。

在我的MDI框架中,我正在如下创建MDI子窗口:

Form frm = new frmMyChild();
frm.MdiParent = this;
frm.WindowState = FormWindowState.Maximized;
frm.Show();
frm.Focus();

到目前为止,这很好,但是屏幕很快就会“弹起”,因为子窗口被置于“正常”状态,然后再次将它们最大化。如何预防?

答案

即使将MenuStrip添加到MDI父窗体,Form.MainMenuStrip仍为null。当此属性为null时,MDI子项的“系统菜单”控件不会与MenuStrip(或旧的MainMenu)一起使用,因此子子窗体标题栏仍然可见,并位于MenuStrip上方。当创建并最大化新的子窗体时,在重新创建子窗体标题时,上下菜单MenuStrip bouncesMainMenuStrip属性设置为MDI父级MenuStrip的实例,将使MDI子级的System Menu控件与MenuStrip(或MainMenu)一起成为

blend

有趣的是,在.Net Source Code中看到此行为和设计随时间变化了多少次(这只是注释:)。

[TheMDIMenuStrip

是在设计时创建并在InitializeComponent()中初始化的MDI父级的MenuStrip。 public partial class MDIParent : Form { public MDIParent() { InitializeComponent(); this.MainMenuStrip = this.TheMDIMenuStrip; this.TheMDIMenuStrip.SendToBack(); } ... }
之前:

MDI MenuStrip Maximize before

之后:

MDI MenuStrip Maximize after

以上是关于如何避免在添加新的MDI子窗口时出现屏幕跳动的主要内容,如果未能解决你的问题,请参考以下文章

vb6中如何实现类似MDI子窗体的窗体

如何在MDI的主窗口菜单中新建一个菜单选项,点击该选项建立一个新的子窗口

重置 mdi 子视图位置

在winform的MDI窗体中,打开一个新的子窗体的同时如何关闭前一个子窗体?

带有 OpenGL 的 Qt MDI 应用程序:如何获取有效的屏幕截图?

Delphi中实现MDI子窗体(转)