- •12. Работа с несколькими формами.
- •1. Параллельные формы
- •Активизация дополнительной формы – метод Show() этой формы.
- •2. Модальные формы
- •Форма, открытая в модальном режиме, закрывается
- •3. Многодокументный интерфейс
- •Создадим учебный проект, работающий в режиме MDI.
- •Обычно все MDI приложения имеют меню, в котором обязательно присутствует пункт
- •Обычно внутренние окна MDI приложения используются для отображения различных документов.
- •Чтобы дочерняя форма могла отображать текст, установим на неё компонент RichTextBox – текстовый
- •4. Организуем создание нового дочернего окна при выборе пункта New меню File.
- •Теперь в рамках нашего проекта можно открывать сколько угодно дочерних MDI форм.
- •Для управления дочерними окнами со стороны обрамляющей формы последняя имеет следующие свойства:
- •5. Дадим новым дочерним (типа «Окно 1», «Окно
- •6. формы. «Каскад», укажем
- •В том же меню Windows включим отображение имён всех открытых дочерних окон.
- •7. Реализуем реализуем обработку выбора пунктов «Close» и «Exit» из меню «File».
- •Внимание!
- •8. В меню «Edit» добавим пункт «Свернуть все окна».
- •9. В меню «Edit» добавим пункт «Окрасить окна в красный цвет».
- •private void toolStripMenuItem3_Click (object sender, EventArgs e)
- •Задание: Сделать две формы и на каждой из них поставить Numeric UpDown, позволяющий
4. Организуем создание нового дочернего окна при выборе пункта New меню File.
Для этого реализуем обработку события Click этого пункта.
private void newToolStripMenuItem_Click (object sender, EventArgs
e)
{
Form2 child = new Form2(); child.MdiParent = this; child.Show();
}
Теперь в рамках нашего проекта можно открывать сколько угодно дочерних MDI форм.
Для управления дочерними окнами со стороны обрамляющей формы последняя имеет следующие свойства:
Свойство |
Тип |
Описание |
ActiveMdiChi |
Form |
Указатель на активную дочернюю форму |
ld |
|
|
MdiChildren |
Form[ |
Массив форм, представляющий дочерние |
|
] |
MDI-формы |
MdiChildren. |
int |
Количество открытых дочерних форм |
Length |
|
|
5. Дадим новым дочерним (типа «Окно 1», «Окно
Для этого изменим код пункта New меню File
private void newToolStripMenuItem
e)
{
Form2 child = new Form2(); child.MdiParent = this; child.Text = "Окно " +
this.MdiChildren.Length.ToString();
child.Show();
}
6. формы. «Каскад», укажем
{
}
{
}
private void
{
this.
}
В том же меню Windows включим отображение имён всех открытых дочерних окон.
Для этого у компонента MenuStrip, представляющего контейнер главного меню, свойству MdiWindowListItem присвоим значение windowToolStripMenuItem – указание на пункт Windows.
7. Реализуем реализуем обработку выбора пунктов «Close» и «Exit» из меню «File».
private void closeToolStripMenuItem_Click (object sender, EventArgs e)
{
ActiveMdiChild.Close();
}
private void exitToolStripMenuItem_Click (object sender, EventArgs
e)
{
this.Close();
}
Внимание!
Работать с текущим дочерним окном можно, если оно существует. При обращении к свойству ActiveMdiChild при отсутствии дочерних окон произойдёт исключение (сбой программы). Чтобы этого не случилось, желательно проверять, не является ли пустой ссылка
ActiveMdiChild.
private void closeToolStripMenuItem_Click (object sender, EventArgs e)
{
// ActiveMdiChild.Close();
Form ActiveChild = ActiveMdiChild;
if (ActiveChild !=null) ActiveChild.Close();
}
8. В меню «Edit» добавим пункт «Свернуть все окна».
private void toolStripMenuItem2_Click (object sender, EventArgs e)
{
for (int x = 0; x < this.MdiChildren.Length; x+ +)
{
Form2 Child = (Form2)this.MdiChildren[x]; Child.WindowState =
}
}
9. В меню «Edit» добавим пункт «Окрасить окна в красный цвет».
Т.к. вся клиентская область дочерних окон задана компонентом RichTextBox, то окрашивать в красный цвет нужно именно его.
Однако, вроде бы правильный код не работает
private void toolStripMenuItem3_Click (object sender, EventArgs e)
{
for (int x = 0; x < this.MdiChildren.Length; x+ +)
{
Form2 Child = (Form2)this.MdiChildren[x]; Child.richTextBox1.BackColor = Color.Red;
}
}