Форма 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
}
}