Этот урок описывает создание базового функционала для программы-калькулятора, включая реализацию кнопок, обработку событий и выполнение арифметических операций.
Реализация кнопок с цифрами
Реализуем кнопки с цифрами. При нажатии на кнопку, соответствующая цифра добавляется к значению в текстовом поле. Вместо десяти отдельных обработчиков событий создадим одну функцию, извлекающую текст с нажатой кнопки и добавляющую его к тексту в текстовом поле.
Универсальный обработчик событий
В myform.h создадим приватный метод ButtonNumberClick без возвращаемого значения. Этот метод будет обрабатывать нажатие всех кнопок с цифрами. В конструкторе выберем все кнопки с цифрами и для события Click назначим метод ButtonNumberClick.
В ButtonNumberClick получим текст нажатой кнопки через параметр Sender (объект, вызвавший событие). Преобразуем Sender из object в Button с помощью safe_cast:
Button^ button = safe_cast<Button^>(Sender);
Получим текст кнопки с помощью button->Text и добавим его в текстовое поле (resultLabel):
resultLabel->Text = button->Text;
(Текстовое поле должно быть переименовано в resultLabel.)
Добавление к существующему значению
Для корректной работы, цифры добавляются к введенному числу, а не перезаписывают его. Добавим проверку на нулевое значение в текстовом поле:
if (resultLabel->Text == "0") {
resultLabel->Text = button->Text;
} else {
resultLabel->Text += button->Text;
}
Математические операции
Кнопкам математических операций (+, -, *, /) присвоим имена (например, buttonDivide для деления). Для каждой кнопки создадим отдельный обработчик событий. Каждый обработчик выполняет три действия:
- Запоминает введенное число.
- Запоминает выбранную операцию.
- Очищает текстовое поле.
Для избежания дублирования кода создадим функцию MathAction с параметром char Action (символ операции). Внутри функции:
- Первое число запоминается в переменной FirstNum (тип int).
- Операция запоминается в переменной UserAction (тип char).
- resultLabel очищается.
В обработчиках событий для кнопок математических операций вызываем MathAction, передавая соответствующий символ операции.
Кнопка «равно»
Обработчик кнопки «равно» выполняет:
- Получение второго числа из resultLabel (преобразование строки в число с помощью System::Convert::ToInt32).
- Выполнение операции из UserAction с помощью switch-case.
- Преобразование результата в строку (System::Convert::ToString) и отображение в resultLabel.
int secondNum = System::Convert::ToInt32(resultLabel->Text);
int result;
switch (UserAction) {
case '+': result = FirstNum + secondNum; break;
case '-': result = FirstNum - secondNum; break;
case '*': result = FirstNum * secondNum; break;
case '/': result = FirstNum / secondNum; break;
}
resultLabel->Text = System::Convert::ToString(result);
В этом уроке создан базовый функционал калькулятора, включающий обработку ввода чисел и выполнение арифметических операций. Функционал может быть улучшен и расширен.