C++ WinForms: Калькулятор — обработка данных и событий

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

Реализация кнопок с цифрами

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

Универсальный обработчик событий

В 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 для деления). Для каждой кнопки создадим отдельный обработчик событий. Каждый обработчик выполняет три действия:

  1. Запоминает введенное число.
  2. Запоминает выбранную операцию.
  3. Очищает текстовое поле.

Для избежания дублирования кода создадим функцию MathAction с параметром char Action (символ операции). Внутри функции:

  • Первое число запоминается в переменной FirstNum (тип int).
  • Операция запоминается в переменной UserAction (тип char).
  • resultLabel очищается.

В обработчиках событий для кнопок математических операций вызываем MathAction, передавая соответствующий символ операции.

Кнопка «равно»

Обработчик кнопки «равно» выполняет:

  1. Получение второго числа из resultLabel (преобразование строки в число с помощью System::Convert::ToInt32).
  2. Выполнение операции из UserAction с помощью switch-case.
  3. Преобразование результата в строку (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);

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

Что будем искать? Например,программа