Как избежать отказов экрана при добавлении нового дочернего окна MDI - PullRequest
1 голос
/ 10 января 2020

В моем кадре MDI я создаю дочерний MDI Windows следующим образом:

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

Пока что это работает хорошо, но экран "подпрыгивает", потому что ребенок windows переводятся в «нормальное» состояние, а затем снова максимизируются. Как это можно предотвратить?

1 Ответ

3 голосов
/ 10 января 2020

Даже если MenuStrip добавляется в родительскую форму MDI, Form.MainMenuStrip по-прежнему null.
Когда это свойство равно null, системное меню управляет дочерним MDI. не смешиваются с MenuStrip (или старым MainMenu), поэтому строка заголовка дочерней формы все еще видна и расположена над MenuStrip.
Когда новая дочерняя форма создается и разворачивается, MenuStrip подпрыгивает вверх и вниз, когда дочерний заголовок формы воссоздается.

Установка свойства MainMenuStrip для экземпляра MenuStrip родительского элемента MDI приведет к тому, что элементы управления системного меню дочернего элемента MDI смешаются с MenuStrip (или MainMenu).

Интересно видеть в . Net Исходный код , сколько раз это поведение и дизайн менялись с течением времени (и это просто комментарии там :).

TheMDIMenuStrip - это строка меню родителя MDI, созданная во время разработки и инициализированная в InitializeComponent().

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

До:

MDI MenuStrip Maximize before

После:

MDI MenuStrip Maximize after

...