Поскольку это задание, я ожидаю, что ваш код будет содержать намного больше комментариев, детализирующих ваш алгоритм
Я думаю, вам нужно подумать о том, как работает настоящий калькулятор. Я предполагаю, что вы делаете простую операцию, в которой любая операция может инициировать вычисление, если установлены оба операнда - после вычисления, если вы положили результат в операнд1 и неустановленный операнд2:
Представьте, что пользователь нажимает 1+2+4=
- Установите операнд 1 на 1
- Установите операцию на +
- Установите операнд 2 на 2
- Оба операнда установлены, поэтому рассчитайте, установив операнд 1 на 4 и Отмена операнда 2 и оператора
- Установить операцию на +
- Вычислять, потому что = нажата, но не сбрасывать операнд2 (потому что пользователь может забивать = и добавлять 4 каждый раз)
Рассмотрите возможность использования метода Calculate, который принимает логическое значение, указывающее, должен ли он сбрасывать операнд2 / оператор или нет. Вычисление всегда должно передавать результат операции в операнд1. Независимо от того, установлен оператор или нет, его следует использовать для определения того, печатает ли пользователь операнд1 или операнд2. Лично я бы покончил с вводом и конкатенацией операндов 1 и 2 напрямую. Я бы принял решение о расширении в обработчике кликов. У меня была бы специальная переменная для недавнего нажатия кнопки equals, которая будет сбрасывать все, если пользователь нажимает цифровую кнопку после нажатия кнопки equals, или сохраняет операнд1 и устанавливает новую операцию и вставляет операнд2, если это операция, которую пользователь нажимает после равенства
Есть и другие вещи, которые мы могли бы исправить в вашем коде. Этот фрагмент меня на некоторое время озадачил:
private void cmdEight_Click(object sender, EventArgs e)
{
this.lblDisplay.Text = "";
input += 8;
this.lblDisplay.Text += input;
}
Это было бы более логично:
private void cmdEight_Click(object sender, EventArgs e)
{
input += 8;
lblDisplay.Text = input:
}
Но на самом деле, если у вашей кнопки просто 8 в качестве текста, вы можете сделать это:
private void cmdAny_Click(object sender, EventArgs e)
{
input += (sender as Button).Text;
lblDisplay.Text = input:
}
И каждая кнопка использует один и тот же обработчик
Если вы делаете калькулятор, который понимает, что умножение и деление выполняются до сложения и вычитания, которые вам придется сохранить все операнды и операторы в списке, а затем go через список, выполняя определенные операции сначала при нажатии равно