ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание
Шрифт:
Создание родительской формы
Для демонстрации основ процесса построения MDI-приложения создайте новое приложение Windows, назвав его SimpleMdiApp. При этом почти вся MDI-ин-фраструктура может быть назначена исходной форме с помощью различных инструментов проектирования. Сначала найдите свойство IsMdiContainer в окне свойств и установите его равным true (истина). В результате в окне проектирования формы область клиента изменится – теперь она будет визуально представлять контейнер дочернего окна.
Затем разместите в главной форме новый элемент управления MenuStrip. В этом меню укажите три элемента высшего уровня с названиями Файл, Окно
После создания меню пользовательского интерфейса обработайте событие Click для пунктов меню Выход, Создать, Каскадом, По вертикали и По горизонтали (напомним, что меню Окно пока что не имеет никаких подчиненных элементов). Обработчик элемента Файл->Создать мы реализуем в следующем разделе главы, а сейчас рассмотрим программный код для остальных элементов меню.
Наибольший интерес здесь представляет использование метода LayoutMdi и соответствующего перечня MdiLayout. Программный код обработки выбора каждого из элементов меню должен быть вам понятен. При выборе элемента пользователем вы даете указание родительской форме выполнить автоматическое размещение всех дочерних окон.
Перед тем как перейти к обсуждению процесса создания дочерних форм, установите еще одно свойство MenuStrip. Свойство MdiWindowListItem используется доя того, чтобы выяснить, какой пункт меню наивысшего уровня должен использоваться для автоматического списка имен всех дочерних икон при соответствующем выборе из меню. Присвойте значение этого свойства члену-переменной windowToolStripMenuItem. По умолчанию для этого списка используется значение дочернего свойства Text с числовым суффиксом (т.е. Form1, Form2, Form3 и т.д.).
Создание дочерней формы
Теперь, когда у вас есть оболочка MDI-контейнера, нужно создать дополнительную форму, выполняющую роль прототипа для данного дочернего окна. Начните со вставки нового типа Form в имеющийся проект (используйте Project->Add Windows Form), присвойте этому типу имя ChidPrototypeForm и обработайте для него событие Сlick. В сгенерированном обработчике события путем случайного выбора установите цвет фона для области клиента. Кроме того, выведите "преобразованное в строку" значение Color (цвет) нового объекта в полосу заголовка дочернего окна. Следующая
программная логика реализует поставленные задачи.Создание дочерних окон
Заключительным шагом должно быть создание подходящей реализации обработчика событий Файл->Создать родительской формы. Теперь, когда дочерняя форма определена, соответствующая программная логика оказывается очень простой: нужно создать и отобразить новый экземпляр типа ChildPrototypeForm. Кроме того, нужно установить значение свойства MdiParent дочерней формы, указывающее на содержащую ее форму (в данном случае это ваше главное окно). Вот как должны выглядеть соответствующие модификации программы.
Замечание. Дочерняя форма имеет возможность использовать свойство MdiParent непосредственно, когда требуется выполнить какие-то действия (или организовать сообщение) с родительским окном.
При тестировании этого приложения начните с создания нескольких дочерних окон и, щелкнув на каждом из них, создайте уникальные цвета для их фона, Если теперь рассмотреть подчиненные элементы меню Окно, вы должны обнаружить, что там представлена и учтена каждая дочерняя форма. Точно так же с помощью элементов меню Упорядочить окна вы можете дать указание родительской форме разместить дочерние формы по вертикали, горизонтали или каскадом. На рис. 19.26 показано окно готового приложения.
Рис. 19.26. Окно MDI-приложения
Исходный код. Проект SimpleMdiApp размещен в подкаталоге, соответствующем главе 19.
Резюме
Эта глава рассказывает об основах построения графического интерфейса с помощью типов, содержащихся в пространстве имен System.Windows.Forms. Сначала вам предлагается создать несколько приложений вручную, и в процессе этого выясняется, что GUI-приложение, как минимум, должно иметь класс, производный от Form, и метод Main, вызывающий Application.Run.