pragma once Hard / Занятие 8
.doc
Создание приложений Windows Forms
Приложение Windows Forms – это приложение Microsoft Windows на платформе .NET Framework. Приложения используют классы .NET Framework и иные функциональные возможности .NET с новым синтаксисом Visual C++.
В Windows Forms форма является видимой поверхностью, на которой отображается информация для пользователя. Обычно приложение Windows Forms строится путем помещения элементов управления в форму и написанием кода для реагирования на действия пользователя, такие как щелчки мыши или нажатия клавиш.
Элемент управления — это отдельный элемент пользовательского интерфейса, отображающий данные или принимающий ввод данных.
При выполнении пользователем какого-либо действия с формой или одним из ее элементов управления, создается событие. Приложение реагирует на эти события с помощью кода и обрабатывает события, когда они происходят.
Событие воспринимается Windows и преобразуется в сообщение — запись, содержащую необходимую информацию о событии.
Сообщения поступают в общую очередь, откуда распределяются по очередям приложений.
Каждое приложение содержит цикл обработки сообщений, который выбирает сообщение из очереди и через операционную систему вызывает подпрограмму, предназначенную для его обработки.
Таким образом, Windows-приложение состоит из:
-
главной программы, обеспечивающей инициализацию и завершение приложения;
-
цикла обработки сообщений;
-
набора обработчиков событий.
Разработчик создает только обработчики событий, остальные части приложения генерируются автоматически.
Создание обработчика событий
Приложения, работающие на основе событий, в ответ на событие выполняют код. Для каждой формы и элемента управления предоставляется свой набор событий, которые могут быть запрограммированы.
Обработчик событий — это метод, связанный с событием. При возникновении события выполняется код этого метода. В каждом обработчике имеются два параметра, позволяющие правильно обработать событие. В следующем примере показан обработчик события Click для элемента управления Button.
private:
void button1_Click(System::Object ^ sender,
System::EventArgs ^ e) { }
Первый параметр, sender, предоставляет ссылку на объект, вызвавший событие.
Второй параметр, e, передает объект, связанный с обрабатываемым событием. Например, при возникновении события MouseDown мы можем узнать координаты мыши (e->X, e->Y) или, какая кнопка мыши была нажата (e->Button).
Обработчик события можно создать двумя способами.
Первый способ:
В конструкторе Windows Forms двойной щелчок формы или элемента управления создает обработчик событий для действия по умолчанию у данного элемента.
Второй способ:
-
Щелкните форму или элемент управления, для которого требуется создать обработчик событий.
-
В окне Свойства нажмите кнопку События (молния).
-
В списке доступных событий найдите нужное событие.
-
В поле справа от имени события введите имя обработчика и нажмите клавишу ENTER или выполните двойной щелчок на имени события, чтобы создать обработчик с именем по умолчанию.
-
Добавьте в обработчик события необходимый код.
Пример 8.1. Использование элементов Label, TextBox, GroupBox, RadioButton, Button.
Создайте новое приложение Windows Forms:
-
В меню Файл последовательно выберите команды Создать и Проект....
-
В узле Visual C++ области Типы проектов выберите CLR, а затем в области Шаблоны выберите Приложение Windows Forms.
-
Введите имя проекта. Можно принять место размещения по умолчанию, ввести необходимое место размещения или перейти к папке, в которой требуется сохранить проект.
-
Откроется конструктор Windows Forms, отображающий форму Form1 созданного проекта.
При создании нового приложения форма пустая. В нее нужно добавить необходимые элементы. Если на экране не видны Панель элементов и окно Свойства, то выведите их, используя команды меню Вид или кнопки панели инструментов и .
Чтобы добавить элемент управления в форму, щелкните его в панели элементов и перетащите в форму. Если щелкнуть элемент в панели элементов два раза, то он будет добавлен в верхний левый угол формы. В обоих случаях элемент добавляется в форму с размером по умолчанию.
Чтобы добавить элемент в нужное место формы с необходимыми размерами, щелкните его в панели элементов, затем щелкните место в форме, где должен располагаться левый верхний угол элемента, и перетащите указатель мыши на место, в котором должен располагаться правый нижний угол элемента.
Для изменения свойства элемента управления или формы щелкните объект, чтобы он стал активным. После этого найдите нужное свойство в окне Свойства и измените значение в правой колонке.
Добавьте в форму следующие элементы:
-
2 элемента Label (для вывода надписей «аргумент» и «результат»);
-
2 элемента TextBox (для ввода значения и вывода результата);
-
1 элемент GroupBox (находится в Контейнерах, для объединения операций в одну группу);
-
в рамку добавить 2 элемента RadioButton (для выбора операций);
-
2 элемента Button (для выполнения вычислений и завершения работы).
Измените значения свойства Text у всех элементов и формы на те, которые видны на рисунке.
В результате форма должна приобрести следующий вид:
Добавьте обработчики событий для кнопок.
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
//Application::Exit();
if (MessageBox::Show("Закончить?",
"Пример приложения", MessageBoxButtons::YesNo,
MessageBoxIcon::Question) ==
System::Windows::Forms::DialogResult::Yes)
Application::Exit();
}
private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) {
double x, y;
x=System::Convert::ToDouble( textBox1->Text);
if (radioButton1->Checked) y=x/2;
else if (radioButton2->Checked)
{if (x>=0)
y=System::Math::Sqrt(x);
else {y=0; MessageBox::Show("Нет корня");}
}
else {y=0; MessageBox::Show("Выберите операцию");}
textBox2->Text=y.ToString();
}
Выполните приложение как обычно.
Пример 8.2. Использование списков, флажков и элемента для выбора даты.
Создайте приведенную форму:
Добавьте обработчики событий:
//выполняется при загрузке формы
private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) {
//создаем массив для инициализации списка
array<String^>^ Цвета={"Белый", "Красный", "Желтый"};
//заполняем список (элемент comboBox1)
comboBox1->Items->AddRange(Цвета);
//выбираем нулевой элемент списка ("Белый")
comboBox1->SelectedIndex=0;
//выводим текущую дату
label4->Text=dateTimePicker1->Text;
}
//выполняется при выборе элемента из списка
private: System::Void comboBox1_SelectedIndexChanged(System::Object^ sender, System::EventArgs^ e) {
switch (comboBox1->SelectedIndex) {
case 0: //выбрали "Белый"
label4->BackColor=Color::White;
break;
case 1: //выбрали "Красный"
label4->BackColor=Color::Red;
break;
case 2: //выбрали "Желтый"
label4->BackColor=Color::Yellow;
break;
}
}
//изменили состояние флажка "Полужирный"
private: System::Void checkBox1_CheckedChanged(System::Object^ sender, System::EventArgs^ e) {
label4->Font = gcnew System::Drawing::Font( label4->Font,
//^ - побитовое ИЛИ. Разряд для полужирного меняется на противоположный
label4->Font->Style ^ FontStyle::Bold );
}
//изменили состояние флажка "Курсив"
private: System::Void checkBox2_CheckedChanged(System::Object^ sender, System::EventArgs^ e) {
label4->Font = gcnew System::Drawing::Font( label4->Font,
//^ - побитовое ИЛИ. Разряд для курсива меняется на противоположный
label4->Font->Style ^ FontStyle::Italic );
}
//Выбрали новую дату
private: System::Void dateTimePicker1_ValueChanged(System::Object^ sender, System::EventArgs^ e) {
label4->Text=dateTimePicker1->Text;
}
Задания:
-
В форме примера 8.1 для выбора операции используйте список вместо элементов RadioButton. Добавьте еще несколько операций. Для разных операций при выводе на экран используйте разные цвета символов (свойство ForeColor).
-
Создайте форму, которая позволяет для заданного значения и выбранных условий проверить, выполняются ли эти условия.
-
Разработайте форму для решения уравнения ax2 + bx + c =0. Значения a, b, c вводятся. Предусмотрите возможность ввода пользователем любых значений параметров. Например, при a=0, b=0, c=0 x–любое число.