Читать в оригинале

<< ПредыдущаяОглавлениеСледующая >>


1.4.2. Приложение Windows

Создание Windows-приложения

Проделаем аналогичную работу: построим Windows-проект, рассмотрим, как он выглядит по умолчанию, а затем дополним его до проекта «Приветствие». Повторяя уже описанные действия, в окне нового проекта (см. рис. 5) выберем тип проекта Windows Application, дав проекту имя WindowsHello.

Рисунок 8. Создание Windows - приложения

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

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace WindowsHello
{ // пр-во имен - начало описания
public partial class Forml : Form
{ // класс - начало описания
         public Form1()
         { // конструктор класса
            InitializeComponent();
     } // конец блока описания конструктора класса
} // конец блока описания класса Form1
} // конец блока описания пространства имен

Начнем с того, что теперь пространству имен предшествует 6 предложений using; это означает, что используются не менее 6-ти классов, находящихся в разных пространствах имен библиотеки NFCL. Одним из таких используемых классов является класс Form из глубоко вложенного пространства имен System.Windows.Forms. Построенный по умолчанию класс Form1 является наследником класса Form и автоматически наследует его функциональность - свойства, методы, события. При создании объекта этого класса, характеризующего форму, одновременно Visual Studio создает визуальный образ объекта - окно, которое можно заселять элементами управления. В режиме проектирования эти операции можно выполнять вручную, при этом автоматически происходит изменение программного кода класса.

Весь код, генерируемый системой, по умолчанию не показывается, так как в его редактировании программистом, как правило, нет необходимости. Он предназначен для инициализации формы и элементов управления, расположенных на ней. Функция Main не отображается, так как она предназначена только для того, чтобы отобразить первую форму проекта.

 

Основная операция объектно-ориентированных приложений

 

Основной операцией, инициирующей вычисления в объектно- ориентированных приложениях, является вызов метода F некоторого класса x, имеющий вид:

x.F(arg1, arg2, argN);

В этом вызове x называется целью вызова, и здесь возможны три ситуации:

x - имя класса. В этом случае метод F должен быть статическим методом класса, объявленным с атрибутом static, как это имеет место, например, для точки вызова - процедуры Main;

x - имя объекта или объектное выражение. В этом случае F должен быть обычным, не статическим методом. Иногда такой метод называют экземплярным, подчеркивая тот факт, что метод вызывается экземпляром класса - некоторым объектом;

x - не указывается при вызове. Такой вызов называется неквалифицированным, в отличие от двух первых случаев. Отметим, неквалифицированный вызов вовсе не означает, что цель вызова отсутствует, - она просто задана по умолчанию. Целью является текущий объект (текущий класс для статических методов). Текущий объект имеет зарезервированное имя this. Применяя это имя, любой неквалифицированный вызов можно превратить в квалифицированный вызов. Иногда без этого имени просто не обойтись.

 

Выполнение проекта по умолчанию

 

Давайте посмотрим, что происходит в проекте, создаваемом по умолчанию, когда процедура Main начала работать. Процедура Main содержит всего одну строчку: Application.Run(new Form1());

Прокомментируем этот квалифицированный вызов. Целью здесь является класс Application из пространства имен System.Windows.Forms. Класс вызывает статический метод Run, которому в качестве фактического аргумента передается объектное выражение new Forml (). При вычислении этого выражения создается первый объект - экземпляр класса Forml. Этот объект становится текущим. Для создания объекта вызывается конструктор класса. В процессе работы конструктора осуществляется неквалифицированный вызов метода InitializeComponent(). Целью этого вызова является текущий объект - уже созданный объект класса Forml. Ни в конструкторе, ни в вызванном методе новые объекты не создаются. По завершении работы конструктора объект класса Forml передается методу Run в качестве аргумента.

Метод Run класса Application - это знаменитый метод. Во-первых, он открывает форму - видимый образ объекта класса Forml, с которой теперь может работать пользователь. Но главная его работа состоит в том, что он создает настоящее Windows-приложение, запуская цикл обработки сообщений о происходящих событиях. Поступающие сообщения обрабатываются операционной системой согласно очереди и приоритетам, посредством вызовов обработчиков соответствующих событий. Поскольку наша форма по умолчанию не заселена никакими элементами управления, то поступающих сообщений немного. Все, что может делать пользователь с формой, так это перетаскивать ее по экрану, свертывать и изменять размеры. Конечно, он может еще закрыть форму. Это приведет к завершению цикла обработки сообщений, к завершению работы метода Run, к завершению работы метода Main, к завершению работы приложения.

 

Проект WindowsHello

 

Давайте расширим приложение по умолчанию до традиционного приветствия в Windows-стиле, добавив окошки для ввода и вывода информации. Как уже говорилось, при создании Windows-приложения по умолчанию создается не только объект класса Form1 - потомка класса Form, но и его видимый образ - форма, с которой можно работать в режиме проектирования, населяя ее элементами управления.

Добавим в форму следующие элементы управления.

1. Текстовое окно и метку. По умолчанию они получат имена textBoxl и labell. Текстовое окно предназначается для ввода имени пользователя, метка, визуально связанная с окном, позволит указать назначение текстового окна. Установим свойство Multiline для текстового окна как true, свойство Text у метки - Ваше Имя.

2. Аналогичная пара элементов управления - textBox2 и label2 - предназначены для вывода приветствия. Поскольку окно textBox2 предназначено для вывода, то включим его свойство ReadOnly.

3. Поместим на форму командную кнопку, обработчик события Click которой и будет организовывать чтение имени пользователя из окна textBoxl и вывод приветствия в окно textBox2.

На рис. 9 показано, как выглядит наша форма в результате проектирования.

Рисунок 9. Форма «Приветствие»

В заключение приведем текст обработчика событий командной кнопки. Как задается обработчик того или иного события для элементов управления? Это можно делать по-разному. Есть стандартный способ включения событий. Достаточно выделить нужный элемент в форме, в окне свойств нажать кнопку событий (со значком молнии) и из списка событий выбрать нужное событие и щелкнуть по нему. В данной ситуации все можно сделать проще – двойной щелчок по кнопке включает событие, и автоматически строится заготовка обработчика события с нужным именем и параметрами.

Вот как она выглядит:

private void button1_Click(object sender,System.EventArgs e) {
}

Нам остается добавить свой текст. Добавим следующие строки:

string temp = textBoxl.Text;
if (temp == "")
          textBox2.Text = "Здравствуй, мир!";
else
          textBox2.Text = "Здравствуй, " + temp + " !";

И вот как это работает.

Рисунок 10. Форма "Приветствие" в процессе работы

 

 



<< ПредыдущаяОглавлениеСледующая >>