На этом шаге мы рассмотрим создание приложения, где используются эти компоненты.
Мы продолжаем знакомиться с простыми программами (с графическим интерфейсом), но постепенно будем изучать разные графические компоненты. Далее рассмотрим программу, в которой используются наиболее простые компоненты - кнопки и текстовые метки. А именно, создадим программу, при запуске которой отображается диалоговое окно с сообщением и кнопкой. Щелчок по кнопке приводит к закрытию окна и завершению выполнения программы. Как выглядит окно, отображаемое при запуске программы на выполнение, показано на рисунке 1.
Рис.1. Окно с сообщением и кнопкой
Мы раньше встречались с подобными окнами. От предыдущих случаев данная ситуация отличается тем, что окно с кнопкой "конструируем" мы сами. Программный код, выполнение которого приводит к желаемому результату, представлен в примере ниже.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows.Forms; using System.Drawing; namespace pr275_1 { // Класс окна наследует класс Form: class MyForm: Form { // Конструктор: public MyForm(string msg, string title): base() { this.Text = title; // Заголовок окна // Размеры окна: this.Size = new Size(300, 140); // Окно постоянных размеров: this.FormBorderStyle = FormBorderStyle.FixedSingle; // Окно нельзя развернуть на весь экран: this.MaximizeBox = false; // Имя файла с пиктограммой для окна: string file = "penguin.ico"; // Пиктограмма для окна: this.Icon = new Icon(file); // Создание объекта метки: Label lbl = new Label(); // Текст метки: lbl.Text = msg; // Положение метки в контейнере (окне): lbl.Location = new Point(10, 10); lbl.Width = 265; // Ширина метки lbl.Height = 40; // Высота метки // Текст в метке выравнивается по центру: lbl.TextAlign = ContentAlignment.MiddleCenter; // Тип рамки для метки: lbl.BorderStyle = BorderStyle.Fixed3D; // Объект шрифта: Font F = new Font("Arial", 15, FontStyle.Italic); // Применение шрифта для метки: lbl.Font = F; // Цвет шрифта для метки: lbl.ForeColor = Color.Blue; // Добавление метки в окно: this.Controls.Add(lbl); // Создание объекта кнопки: Button btn = new Button(); // Текст (название) для кнопки: btn.Text = "Закрыть"; // Положение и размеры кнопки: btn.Bounds = new Rectangle(100, 60, 90, 30); // Шрифт для кнопки: btn.Font = new Font(btn.Font.Name, // Название шрифта btn.Font.Size + 3, // Размер шрифта // Стиль шрифта: FontStyle.Underline | FontStyle.Bold ); // Добавление обработчика для события, связанного // со щелчком по кнопке: btn.Click += delegate (object a, EventArgs b) { // Завершение работы приложения: Application.Exit(); }; // Добавление кнопки в окно: this.Controls.Add(btn); } } // Главный класс: class Program { [STAThread] // Главный метод: static void Main() { // Создание объекта окна: MyForm mf = new MyForm("Bceм привет!", // Заголовок "Окно с кнопкой" // Текст в окне ); // Отображение окна: Application.Run(mf); } } }
В программе описывается класс окна MyForm, который является производным от класса Form. Все самое интересное происходит в конструкторе этого класса. В качестве аргументов конструктору передаются два текстовых значения: первое msg определяет сообщение, отображаемое в окне, а второе title определяет заголовок окна. А именно, в теле конструктора командой
this.Text = title;
Размеры окна определяются командой
this.Size = new Size(300, 140); ,
При выполнении команды
this.FormBorderStyle = FormBorderStyle.FixedSingle;
this.MaximizeBox = false; ,
Мы используем собственную пиктограмму для окна (отображается в строке названия окна в левом верхнем углу). Для этого в текстовую переменную file записывается имя файла с изображением для пиктограммы (файл penguin.ico располагается в каталоге bin\Debug).
Пиктограмма для окна определяется командой
this.Icon = new Icon(file); ,
Объект текстовой метки создается командой
Label lbl = new Label(); .
lbl.Text = msg;
lbl.Location = new Point(10, 10);
lbl.BorderStyle = BorderStyle.Fixed3D;
Font F = new Font("Arial", 15, FontStyle.Italic);
lbl.Font = F;
lbl.ForeColor = Color.Blue;
Также в конструкторе класса окна создается объект кнопки (команда
Button btn = new Button();
btn.Text = "Закрыть";
Для кнопки мы также определяем шрифт. В этом случае свойству Font объекта кнопки btn значением присваивается ссылка на объект класса Font. При создании объекта шрифта первым аргументом конструктору передается значение btn.Font.Name. Это текущее название шрифта для кнопки. Проще говоря, мы используем тот шрифт, который предполагалось использовать по умолчанию. Вторым аргументом конструктору класса Font передается выражение btn.Font.Size+3. Данное значение - это увеличенный на 3 текущий размер шрифта, используемый по умолчанию для отображения текста в кнопке. Наконец, третьим аргументом конструктору класса Font передается выражение FontStyle.Underline | FontStyle.Bold. Это две константы Underline и Bold из перечисления FontStyle, объединенные оператором |. Данное выражение означает, что используется и подчеркивание (константа Underline), и выделение жирным стилем (константа Bold).
Для события Click кнопки, которое связано со щелчком по кнопке, добавляется обработчик, основанный на анонимном методе. В теле анонимного метода вызывается команда Application.Exit(), которой завершается работа приложения.
Для добавления кнопки в окно из свойства Controls объекта окна вызывается метод Add(), аргументом которому передана ссылка на объект кнопки.
В главном методе программы создается объект окна (объект mf класса MyForm). Этот объект передается в качестве аргумента методу Run(), который вызывается из класса Application. В результате отображается диалоговое окно (см. рисунок 1). При закрытии окна приложение завершает работу.
На следующем шаге мы рассмотрим использование списков.