Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторный_практикум.doc
Скачиваний:
74
Добавлен:
15.11.2019
Размер:
45.35 Mб
Скачать

4. Модификация приложения Windows Forms: добавление новой формы

Для добавления новой формы нам необходимо следующее: выделим правой кнопкой мыши название нашего проекта в обозревателе решений ( ), далее в выпадающем списке выполняем Добавить -> Создать элемент… (Ctrl+Shift+A). В окне добавления нового элемента ищем: Форма Windows Forms. Вводим и Имя: LWP04Children.cs. Теперь в обозревателе решений появилась новая форма:

Настроим её:

Text

изменим с LWP04Children на Работа с окнами (C#) :: Подчинённая форма

^ Поменяем заголовок формы (то что отображается в шапке приложения слева).

Icon

изменим изображение (иконку) формы

Size

изменим со значений 300; 300 на 500; 100

^ Поменяем размер формы.

FormBorderStyle

изменим с Sizable на FixedDialog

^ Сделаем окно «неизменяем» по размерам.

MaximizeBox

изменим с True на False

^ Уберём кнопку Развернуть.

Новая форма будет выглядеть примерно так:

Рис. 4. 1. Новая добавленная форма приложения

Теперь надо определиться, как именно быдет вызываться новая форма. Как модальное окно, или как подчинённая форма (родительская форма будет контейнером для обращение к дочерней форме). Наиболее интересен второй вариант, так как он позволяет напрямую обращаться к элементам дочерней формы, а не ждать завершения формы. Реализуем сначала этот способ.

Первое что необходимо сделать для вызова второй формы из первой это объявить конструктор класса новой формы:

В файле кода главной формы (изначально созданной средой разработки) ищем:

public partial class LWP04Main : Form

{

После добавляем:

LWP04Children dlg = new LWP04Children();

Добавим вызывающую кнопку Button (показан конечный вариант кнопки):

Параметры добавленной кнопки таковы:

(Name):

ButtonShowChildren

Text:

Подчинённая форма

Size:

150; 23

ToolTip на Hint:

Передача параметра через прямой доступ к элементам управления

Событие Click кнопки ButtonShowChildren:

private void ButtonShowChildren_Click(object sender, EventArgs e)

{

if (!dlg.Visible)

dlg.Show(this);

}

Если откомпилировать приложение, нажать на кнопку тем самым вызван подчинённую форму, закрыть её и снова нажать на кнопку, то мы увидим следующую ошибку:

Рис. 4. 2. Ошибка вызванная нажатием кнопки вызова формы

После закрытия второй формы объект уничтожается. Для правильной обработки повторного вызова нужно добавить событие FromClosing для формы LWP04Childred:

private void LWP04Children_FormClosing(object sender, FormClosingEventArgs e)

{

// Определяем кто закрывает приложение

if (e.CloseReason == CloseReason.UserClosing)

{

Hide();

e.Cancel = true;

}

}

Это правильный обработчик закрытия формы для нашего приложения. Однако, если в кнопке закрыть для дочерней формы применить код уничтожения объекта и высвобождения ресурсов, то кнопка Подчинённая форма вновь вызовет подобную ошибку. Высвобождает ресурс метод Dispose().

Обработчик уничтожения формы по нажатию кнопки Закрыть может выглядеть так (не добавляем для нашего случая, иначе будет потеряна часть будущей функциональности именно для этой дочерней формы):

private void ButtonClose_Click(object sender, EventArgs e)

{

Close(); // Кнопка Закрыть

Dispose(); // Уничтожаем окно и все его параметры до следующего вызова конструктора формы

}

Компилируем приложение, проверяем работу кнопки.