private void ChildPrototypeForm_Click(object sender, EventArgs e)
// Получение трех случайных чисел.
int r, g, b;
Random ran = new Random();
r = ran.Next(0, 255);
g = ran.Next(0, 255);
b = ran.Next(0, 255);
// Создание цветового значения для фона.
Color currColor = Color.FromArgb(r, g, b);
this.BackColor = currColor;
this.Text = currColor.ToString();
}
Заключительным шагом должно быть создание подходящей реализации обработчика событий Файл→Создать родительской формы. Теперь, когда дочерняя форма определена, соответствующая программная логика оказывается очень простой: нужно создать и отобразить новый экземпляр типа ChildPrototypeForm. Кроме того, нужно установить значение свойства MdiParent дочерней формы, указывающее на содержащую ее форму (в данном случае это ваше главное окно). Вот как должны выглядеть соответствующие модификации программы.
private void newToolStripMenuItem_Сlick(object sender, EventArgs e) {
// Создание нового дочернего окна.
ChildPrototypeForm newChild = new ChildPrototypeForm();
// Ссылка на родительскую форму для данного дочернего окна.
newChild.MdiParent =this;
// Отображение новой формы .
newChild .Show();
}
Замечание.Дочерняя форма имеет возможность использовать свойство MdiParent непосредственно, когда требуется выполнить какие-то действия (или организовать сообщение) с родительским окном.
При тестировании этого приложения начните с создания нескольких дочерних окон и, щелкнув на каждом из них, создайте уникальные цвета для их фона, Если теперь рассмотреть подчиненные элементы меню Окно, вы должны обнаружить, что там представлена и учтена каждая дочерняя форма. Точно так же с помощью элементов меню Упорядочить окна вы можете дать указание родительской форме разместить дочерние формы по вертикали, горизонтали или каскадом. На рис. 19.26 показано окно готового приложения.
Рис. 19.26. Окно MDI-приложения
Исходный код.Проект SimpleMdiApp размещен в подкаталоге, соответствующем главе 19.
Эта глава рассказывает об основах построения графического интерфейса с помощью типов, содержащихся в пространстве имен System.Windows.Forms. Сначала вам предлагается создать несколько приложений вручную, и в процессе этого выясняется, что GUI-приложение, как минимум, должно иметь класс, производный от Form, и метод Main(), вызывающий Application.Run().
В этой главе показано, как строить меню верхнего уровня (а также всплывающие меню) и как обрабатывать события меню. Было также выяснено, как можно расширить функциональные возможности типа Form с помощью панелей инструментов и строк состояния. В .NET 2.0 при создании таких элементов пользовательского интерфейса предлагается использовать MenuStrip, ToolStrip и StatusStrip, а не типы MainMenu, ToolBar и StatusBar из .NET 1.x (хотя эти, уже устаревшие типы, тоже поддерживаются). В завершение главы было продемонстрировано, как с помощью средств Windows Forms можно создавать MDI-приложения.
ГЛАВА 20. Визуализация графических данных средствами GDI+
Предыдущая глава предлагала вводное описание процесса построения GUI-приложений с помощью System.Windows.Forms. Целью этой главы является рассмотрение возможностей визуализации графических данных в окне формы (включая как вывод изображений, так и вывод текста различными стилями). Мы начнем с общего рассмотрения пространств имен, связанных с выводом графических данных, ради события Paint и "всемогущего" объекта Graphics.
Остальная часть этой главы будет посвящена способам манипуляции цветами, шрифтами, геометрическими формами и графическими образами. В этой главе также исследуется ряд программных подходов, связанных с визуализацией графических данных, например, таких как проверка доступа пользователя к непрямоугольным областям экрана, логика перетаскивания объектов и формат ресурсов .NET. И хотя, строго говоря, это не относится к GDI+ непосредственно, при операциях с ресурсами нередко приходится использовать манипуляции графическими данными (что оказывается достаточно важным для того, чтобы представить соответствующий материал здесь).
Замечание.Если вы программируете для Web, то можете подумать, что технологии GDI+ вам не пригодятся. Однако на самом деле эти технологии не ограничиваются только традиционными приложениями – они оказывается исключительно важными и для Web-приложений.
Читать дальше