Приклад розробки найпростішого додатку типу Windows Forms на мові C++ в MS Visual Studio
У даній темі розглянуто приклад створення додатку розрахунку площі трикутника за формулою Герона. Додаток реалізований у системі Microsoft Visual Studio як Windows Forms Application.
У роботі описується програмування події кліку на кнопці. Також розглядаються особливості взаємодії програмного коду з компонентами Label (мітка), Button (кнопка), Edit (рядок вводу).
Зміст
Пошук на інших ресурсах:
Математична постановка задачі
Задано довжини сторін трикутника a, b, c. Використовуючи засоби системи Microsoft Visual Studio розробити додаток, що обчислює площу трикутника за формулою Герона. Додаток реалізувати на мові C++ як Windows Forms Application.
Формула Герона розрахунку площі трикутника:
де a, b, c – сторони трикутника; p – півпериметр, розраховується за формулою:
⇑
Виконання
1. Завантажити Microsoft Visual Studio. Створити проект.
Завантажити MS Visual Studio. Створити проект як Windows Forms Application на основі шаблону Visual C++. Приклад створення проекту типу Windows Forms Application в C++ та типи створюваних файлів наведено тут.
Зберегти файл, задати йому довільне ім’я (наприклад “MyApp01“).
У результаті, буде створено головну форму додатку як зображено на рисунку 1.
За замовчуванням, створюється клас форми з іменем Form1. Йому відповідає файл з іменем “Form1.h” (рисунок 1). Для того, щоб перейти в режим перегляду коду файлу “Form1.h” існує три способи:
- команда View -> Code (рисунок 2);
- команда “View Code” з контекстного меню, яке викликається кліком на назві файлу Form1.h в утиліті Solution Explorer (рисунок 3);
- клік на відповідній кнопці (View Code або View Designer) в Solution Explorer (рисунок 4).
Рис. 1. Головна форма додатку
Рис. 2. Команда Code з меню View
Рис 3. Виклик режиму перегляду коду з контекстного меню
Рис 4. Виклик режиму перегляду коду з Solution Explorer
У результаті переходу в режим перегляду, відкриється вікно з текстом файлу Form1.h.
Рисунок 5. Вихідний код модуля форми “Form1.h“
Таким чином можна переходити між режимами проектування (Design) та редагування вихідного коду (Code) проекту.
Клас форми містить:
– конструктор Form1();
– деструктор ~Form1();
– метод InitializeComponent(), в якому можна реалізувати початкову ініціалізацію внутрішніх змінних.
⇑
2. Розміщення компонент на формі.
Для роботи програми потрібно розмістити відповідні компоненти на формі. Щоб розміщувати компоненти, потрібно перейти в режим проектування (Design) одним з вищеописаних способів.
Компоненти знаходяться на панелі інструментів Toolbox (рисунок 6).
Рис. 6. Палітра інструментів Toolbox
У нашому випадку розміщуються наступні компоненти:
– три компоненти типу Label (мітка) (рисунок 7). Призначені для введення інформаційних повідомлень “a = “, “b = “, “c = “. У результаті створюється три екземпляри (об’єкти) з іменами label1, label2, label3;
– три компоненти типу TextBox (рядок вводу) – для вводу значень змінних a, b, c (рисунок 8). Створюється три об’єкти з іменами textBox1, textBox2, textBox3;
– один компонент типу Button (кнопка) (рисунок 9). Призначений для реалізації команди обчислення площі та виклику відповідного обробника події. Створюється екземпляр з іменем button1;
– один компонент типу Label (рисунок 10). Призначений для виведення результату (площа трикутника). Створюється об’єкт з іменем label4.
Після розміщення компонент форма матиме вигляд як показано на рисунку 10.
⇑
3. Налаштування властивостей компонент.
Щоб форма мала більш прийнятний для розв’язку задачі вигляд, потрібно налаштувати її властивості а також властивості компонент розміщених на ній.
Для налаштування властивостей форми та компонент використовується вікно “Properties” (рисунок 11). Це вікно викликається командою
View->Properties Window
або клавішою F4.
Рис. 11. Вікно “Properties” налаштування властивостей компонент
Для зміни назви форми (програми), потрібно її попередньо виділити (мишкою). Після цього у заголовку вікна “Properties” має з’явитись назва форми Form1. Наступним кроком потрібно властивість Text встановити у значення “Обчислення площі трикутника” (рисунок 12).
Рис. 12. Налаштування заголовку головної форми програми
Подібним чином налаштовуються властивості компонент, розміщених на формі. Налаштувати такі властивості компонент:
– у компоненті label1 властивість Text = “a = “;
– у компоненті label2 властивість Text = “b = “;
– у компоненті label3 властивість Text = “c = “;
– у компоненті label4 властивість Text = “Площа трикутника = “;
– у компоненті button1 властивість Text = “Обчислити“.
Після виконаних дій, форма матиме вигляд, як зображено на рисунку 13.
Рис. 13. Вигляд форми після налаштування компонент
⇑
4. Програмування події кліку на кнопці button1.
Результатом роботи програми є обчислення площі трикутника. Обчислення відбувається в момент коли користувач зробить клік на кнопці “Обчислити“. У результаті формується подія Click. У програмі цій події відповідає фрагмент програмного коду, який називається обробником події (event handler). Цей фрагмент формується засобами Microsoft Visual Studio.
Для того щоб викликати обробник події кліку на кнопці button1, потрібно виконати наступні дії (рисунок 14):
– виділити компонент button1;
– у вікні Properties активувати вкладку “Events” (події);
– у списку подій в полі вводу події Click зробити подвійний клік мишкою.
Рис. 14. Виклик обробника події Click кліку на кнопці button1
У результаті виконаних дій, система Microsoft Visual Studio сформує обробник події та переключить вікно в режим вводу програмного коду.
Обробник події (метод) має назву button1_Click. Формується наступний програмний код:
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { }
У фігурні дужки потрібно вписати власний код обчислення площі трикутника за формулою Герона.
Лістинг програмного коду обробника події button1_Click() наступний:
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { float a, b, c, p, s, t; a = System::Double::Parse(this->textBox1->Text); b = System::Double::Parse(this->textBox2->Text); c = c.Parse(this->textBox3->Text); p = (a + b + c)/2; t = p * (p-a) * (p-b) * (p-c); if (t<0) label4->Text = "Невірно введені дані!"; else { s = (float)Math::Sqrt(t); label4->Text = s.ToString(); } }
Пояснимо деякі фрагменти коду.
Щоб перевести значення компоненту textBox1->Text з рядка в дійсний тип float використовується метод Parse() з класу System::Double.
Щоб занести в змінну a типу float значення рядка з textBox1->Text можна записати двома способами:
a = System::Double::Parse(this->textBox1->Text);
або
a = a.Parse(this->textBox1->Text);
Покажчик this є покажчиком на даний клас (клас Form1).
Для взяття квадратного кореня використовується функція Sqrt() класу Math:
s = (float)Math::Sqrt(t);
Для перетворення з типу float у рядковий (string) використовується метод ToString():
label4->Text = s.ToString();
⇑
5. Запуск проекту на виконання.
Тепер можна запускати проект на виконання (клавіша F5) та тестувати його роботу.