WinForm - форма MDI

искусственный интеллект

Форма MDI состоит из родительской формы и нескольких дочерних форм. Формы MDI позволяют отображать несколько форм одновременно и часто включают пункт меню «окно» с подменю, которое используется для переключения между окнами.

Настройки формы MDI не сложны, достаточно установить для свойства формы IsMdiContainer значение True.

Это свойство можно задать либо в окне свойств формы Windows, либо кодом, здесь в событии загрузки формы Load форма задана как MDI-форма, а код выглядит следующим образом.

this.IsMdiContainer = True;

Кроме того, вы также можете добавить приведенный выше код в конструктор класса формы.
После настройки формы MDI эффект работы формы показан на следующем рисунке.

Способ расположения дочерних форм в родительской форме может использовать элемент перечисления LayoutMdi с перечислением Mdilayout.

перечислить инструкция
ArrangeIcons Все дочерние значки MDI располагаются внутри клиентской области родительской формы MDI.
Cascade Все дочерние окна MDI располагаются внутри клиентской области родительской формы MDI.
TileHorizontal Все дочерние окна MDI располагаются горизонтально внутри клиентской области родительской формы MDI.
TileVertical Все дочерние окна MDI располагаются вертикально внутри клиентской области родительской формы MDI.

 

Каскадная схема:

ПлиткаГоризонтальное расположение:

ПлиткаВертикальное расположение:

Код:

  public partial class Form1 : Form

    {

        private static int FormCount = 1;

//Определите эту константу для подсчета количества форм MDI,

        MainMenu mnuMain = new MainMenu();

        MenuItem FileMenu;

        MenuItem NewMenu;

        MenuItem ExitMenu;

        MenuItem WindowMenu;

        public Form1()

        {

            InitializeComponent();

            this.IsMdiContainer = true;

this.Text = "Демонстрационная программа MDI";

            FileMenu = new MenuItem();

FileMenu.Text = "Файл";

            WindowMenu = new MenuItem();

ОкноМеню.Текст = "&Окно";

WindowMenu.MenuItems.Add("&Window Cascade", new EventHandler(Cascade_Click));

WindowMenu.MenuItems.Add("&H", новый обработчик событий(TileH_Click));

WindowMenu.MenuItems.Add("&Вертикальная плитка", new EventHandler(TileV_Click));

            WindowMenu.MdiList = true;

//Это предложение более важно.В этом предложении после создания новой MDI-формы существующие пункты меню MDI-формы будут отображаться под этим пунктом главного меню.

            NewMenu = new MenuItem();

NewMenu.Text = "&Новая форма";

            NewMenu.Click += new EventHandler(New_Click);

            ExitMenu = new MenuItem();

         

            FileMenu.MenuItems.Add(NewMenu);

            FileMenu.MenuItems.Add(new MenuItem("-"));

            FileMenu.MenuItems.Add(ExitMenu);

            mnuMain.MenuItems.Add(FileMenu);

            mnuMain.MenuItems.Add(WindowMenu);

            this.Menu = mnuMain;

        }

        private void Cascade_Click(object sender, EventArgs e)

// Реализовать каскадную операцию MDI-формы в основной форме

        {

            this.LayoutMdi(MdiLayout.Cascade);

        }

        private void TileH_Click(object sender, EventArgs e)

// Реализовать операцию горизонтального мозаичного отображения формы MDI в основной форме

        {

            this.LayoutMdi(MdiLayout.TileHorizontal);

        }

        private void TileV_Click(object sender, EventArgs e)

// Реализовать операцию вертикального мозаичного отображения формы MDI в основной форме

        {

            this.LayoutMdi(MdiLayout.TileVertical);

        }

        private void New_Click(object sender, EventArgs e)

        {

            Form frmTemp = new Form();

//Создаем новую форму

            frmTemp.MdiParent = this;

//Определяем родительскую форму этой формы, чтобы эта форма стала формой MDI

frmTemp.Text = "Форма 0" + FormCount.ToString();

//Задаем заголовок MDI-формы

            FormCount++;

            frmTemp.Show();

// Отобразить эту форму MDI

        }

        private void Form1_Load(object sender, EventArgs e)

        {

            int deskWidth = Screen.PrimaryScreen.WorkingArea.Width;

            int deskHeight = Screen.PrimaryScreen.WorkingArea.Height;

            this.Width = Convert.ToInt32(deskWidth * 0.8);

            this.Height = Convert.ToInt32(deskHeight * 0.8);

        }  

private void new ToolStripMenuItem_Click (отправитель объекта, EventArgs e)

        {

            Form frmTemp = new Form();

//Создаем новую форму

            frmTemp.MdiParent = this;

//Определяем родительскую форму этой формы, чтобы эта форма стала формой MDI

frmTemp.Text = "Форма 0" + FormCount.ToString();

//Задаем заголовок MDI-формы

            FormCount++;

            frmTemp.Show();

// Отобразить эту форму MDI

        }

    }