Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Метод рекомендации АЯ 2 семестр2.docx
Скачиваний:
113
Добавлен:
23.03.2016
Размер:
1.14 Mб
Скачать

8.2.8. Класс Form

Класс Form находится в пространстве имен System::Windows::Forms.

Form является представлением любого окна, отображаемого в приложении. Клаcc Form используется для создания стандартных окон, окон инструментов, необрамленных и перемещаемых окон. Класс Form также используется для создания модальных окон, например, диалогового окна.

С помощью свойств, доступных в классе Form, имеется возможность определить внешний вид, размер, цвет и компоненты управления создаваемого окна или диалогового окна. Свойство Text позволяет задавать заголовок окна в строке заголовка. С помощью свойств Size и DesktopLocation определяются размер и положение окна при его отображении. Имеется возможность использовать свойство цвета ForeColor для изменения назначенного по умолчанию цвета фона всех элементов управления, помещенных в форму. Свойства FormBorderStyle, MinimizeBox и MaximizeBox позволяют управлять возможностью свертывания, развертывания или изменения размера формы во время выполнения.

События класса Form позволяют отвечать на действия, выполненные с формой. Имеется возможность использовать событие Activated для выполнения таких операций, как обновление данных, отображаемых в элементах управления формы при ее активации.

8.2.9. Обработка событий

Событие представляет собой сообщение, посылаемое объектом, чтобы сигнализировать о совершении какого-либо действия. Это действие может быть вызвано в результате взаимодействия с пользователем, например при нажатии кнопки мыши, или может быть обусловлено логикой работы программы. Объект, вызывающий событие, называется отправителем события. Объект, который захватывает событие и реагирует на него, называется получателем события.

События могут поступать от клавиатуры, «мыши», элементов управления.

Для обработки события обычно в класс включают специальный метод – обработчик события, он вызывается автоматически при наступлении события.

Обычно обработчик имеет заголовок вида

void EventHandler(Object^ sender, EventArgs^ e)

(имена обработчика могут быть разными)

Первый параметр метода определяет объект события, а второй объект класса, несущий информацию о событии.

Обработчик событий добавляется в класс в автоматизированном режиме по аналогии с тем, как это выполнялось в MFC, см. лабораторную работу 7.

8.2.10. Основные элементы управления

Классы элементов происходят от класса System::Windows::Forms::Control.

Классы находятся в пространстве имен System::Windows::Forms. Некоторые классы для задания элементов управления:

Label – текстовая метка;

Button – кнопка;

TextBox – текстовое поле;

CheckBox – контрольный переключатель;

RadioButton – радиокнопка;

ListBox – список;

ComboBox – комбинированный список.

Рассмотрим некоторые классы элементов управления, которые необходимы для выполнения работы.

Класс Label (Метка)

Предоставляет текстовую метку для элемента управления.

Можно для объекта класса обрабатывать события, например, «щелчок» на элементе, но чаще этого не делают. Назначение элемента заголовок для другого элемента, например, текстового поля.

Основное свойство (поле): Text

Класс Button (Кнопка)

Основное свойство (поле): Text.

Основное событие: Click (нажатие на кнопку).

Класс TextBox (Текстовое поле)

Элемент управления TextBox позволяет пользователю вводить текст в приложение. Этот элемент управления обладает дополнительными функциональными возможностями, включая редактирование в многострочном режиме и маскировку ввода знаков пароля.

Основное поле: Text.

Основное событие: TextChanged (Изменение текста).

Класс ListBox

Некоторые поля (свойства): Items, SelectedItems предоставляют доступ к коллекциям, используемым ListBox.

Основное событие: SelectedIndexChanged (изменение выбора элемента).

Примеры работы со списком

Добавить строку в список:

listBox1->Items->Add( “Hello World”);

Получить строку из выделенного элемента:

String ^ str=listBox1->SelectedItem->ToString();

Удалить выделенный элемент:

int i=listBox1->SelectedIndex;

listBox1->Items->RemoveAt(i);

Очистить все элементы списка:

listBox1->Items->Clear();

8.3. Задачи и порядок выполнения работы

Условие задачи:

Разработать приложение на основе формы – калькулятор для вычисления арифметических операций (+ - * /). Все проведенные операции добавляются в список, который может быть очищен при нажатии кнопки. Калькулятор может иметь примерный вид, представленный на рисунке 11 (в зависимости от варианта задания).

Рисунок 11 – Приложение типа калькулятор

Пример выполнения работы

Для решения задачи необходимо создать приложение по шаблону CLR, тип проекта «Пустой проект CLR» (в более ранних версиях существовал шаблон Windows Forms Application – Приложение на базе формы, можно было использовать его для создания приложение с формой), окно для создания проекта представлено на рисунке 12.

Рисунок 12 – Вид окна для создания проекта

После создания пустого проекта в него необходимо добавить класс, созданный на базе класса System::Windows::Forms::Form (в более ранних версиях при создании проекта Windows Forms Application это действие выполнять не надо). Для этого через вкладку классы с использованием правой клавиши мыши и появившегося контекстного меню, в котором выбираем элементы «Добавить – Класс», появится окно, представленное на рисунке 13, в котором устанавливаем показанные на рисунке параметры.

Рисунок 13 – Окно для добавления класса формы

Форму можно редактировать графически через конструктор форм и добавлять в форму обработчики событий по аналогии с приложениями MFC.

После редактирования формы через вкладку обозреватель решений в проект добавляем новый файл с расширением .cpp, в который добавляем следующий код.

#include "MyForm1.h"

using namespace MyForm;

[STAThreadAttribute]

int main(array<System::String ^> ^args)

{

// Enabling Windows XP visual effects before any controls are created

Application::EnableVisualStyles();

Application::SetCompatibleTextRenderingDefault(false);

// Create the main window and run it

Application::Run(gcnew MyForm1());

return 0;

}

Если запустить проект в таком виде, то вначале появится консольное окно, а затем форма, чтобы устранить этот недостаток необходимо выполнить следующее. В свойствах проекта во вкладке Компоновщик – Система для параметра «Подсистема» необходимо установить значение Windows, см. рисунок 14. В свойствах проекта во вкладке Компоновщик – Дополнительно для параметра «Точка входа» установить значение main, см. рисунок 15.

Рисунок 14 – Вкладка Компоновщик - Система

Рисунок 15 – Вкладка Компоновщик - Дополнительно

Исходный текст обработчиков событий от нажатия кнопок, добавленных в класс формы (class MyForm1 : public System::Windows::Forms::Form):

// Обработчики событий нажатия на кнопки + - * /

private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {

Double D1=Convert::ToDouble(textBox1->Text); // Преобразуем из строки в Double

Double D2=Convert::ToDouble(textBox2->Text); // Преобразуем из строки в Double

Double D3=D1+D2; // Получаем результат

textBox3->Text=D3+""; // Преобразуем результат в строку и помещаем в

// текстовое поле

String ^ str=D1+"+"+D2+"="+D3; // Строка для списка

listBox1->Items->Add(str); // Строку помещаем в список

}

private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) {

Double D1=Convert::ToDouble(textBox1->Text); // Преобразуем из строки в Double

Double D2=Convert::ToDouble(textBox2->Text); // Преобразуем из строки в Double

Double D3=D1-D2; // Получаем результат

textBox3->Text=D3.ToString(); // Преобразуем результат в строку и помещаем

// в текстовое поле

String ^ str=D1+"-"+D2+"="+D3; // Строка для списка

listBox1->Items->Add(str); // Строку помещаем в список

}

private: System::Void button3_Click(System::Object^ sender, System::EventArgs^ e) {

Double D1=Convert::ToDouble(textBox1->Text); // Преобразуем из строки в Double

Double D2=Convert::ToDouble(textBox2->Text); // Преобразуем из строки в Double

Double D3=D1*D2; // Получаем результат

textBox3->Text=Convert::ToString(D3); // Преобразуем результат в строку и

// помещаем в текстовое поле

String ^ str=D1+"*"+D2+"="+D3; // Строка для списка

listBox1->Items->Add(str); // Строку помещаем в список

}

private: System::Void button4_Click(System::Object^ sender, System::EventArgs^ e) {

Double D1=Convert::ToDouble(textBox1->Text); // Преобразуем из строки в Double

Double D2=Convert::ToDouble(textBox2->Text); // Преобразуем из строки в Double

Double D3=D1/D2; // Получаем результат

textBox3->Text=D3+""; // Преобразуем результат в строку и помещаем

// в текстовое поле

String ^ str=D1+"/"+D2+"="+D3; // Строка для списка

listBox1->Items->Add(str); // Строку помещаем в список

}

// Обработчик события от кнопки "Очистить список"

private: System::Void button5_Click(System::Object^ sender, System::EventArgs^ e) {

listBox1->Items->Clear(); // Очистить все элементы списка

}