【问题标题】:How to avoid screen bouncing when adding a new MDI Child Window添加新的 MDI 子窗口时如何避免屏幕弹跳
【发布时间】:2020-01-10 13:16:20
【问题描述】:

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

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

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

【问题讨论】:

    标签: c# .net winforms mdi


    【解决方案1】:

    即使将 MenuStrip 添加到 MDI 父窗体,Form.MainMenuStrip 仍然是 null
    当此属性为null 时,MDI 子项的 System Menu 控件不会与 MenuStrip(或旧的MainMenu混合,因此子窗体标题栏仍然可见并位于上方菜单条。
    当一个新的子窗体被创建并最大化时,MenuStrip弹跳,而子窗体标题被重新创建。

    MainMenuStrip 属性设置为MDI 父级MenuStrip 的实例,将导致MDI 子级的系统菜单控件混合 与MenuStrip(或MainMenu)。

    有趣的是,在.Net Source Code 中看到这种行为和设计随着时间的推移发生了多少次变化(而且只是那里的 cmets :)。

    TheMDIMenuStrip 是在设计时创建并在 InitializeComponent() 中初始化的 MDI Parent 的 MenuStrip。

    public partial class MDIParent : Form
    {
        public MDIParent()
        {
            InitializeComponent();
            this.MainMenuStrip = this.TheMDIMenuStrip;
            this.TheMDIMenuStrip.SendToBack();
        }
        ...
    }
    

    之前:

    之后:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-14
      • 2021-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-18
      • 1970-01-01
      相关资源
      最近更新 更多