Курс по WinForms. Урок 3.2.
Как вы помните, на прошлом уроке мы начали делать первую программу - калькулятор. В этот раз мы сделаем выполнение операции и ввод второго операнда. Там, конечно, не будет СУПЕР РОВНЫХ кнопок как на калькуляторе Windows 10, но это всего лишь калькулятор! (Этот урок будет довольно коротким, но с большим количеством кода, ведь предыдущий был очень длинным и с большим количеством работы с конструктором)
Ввод второго числа
Конечно, прикольно, когда ты можешь вводить число в калькулятор, но что делать с одним операндом? Нам нужен второй! Переходим к коду:
Сначала добавляем новые "проверочные переменные": (я их так называю, они для проверки)
string MathOper; //здесь будут вписаны наши операторы bool IsThereFirstNumber = false; //для проверки на "пустоту". Если чисел нет, то ставим 0 (это для дробных) bool secondNumStart = false; bool Start = false; //нужно, чтобы мы знали, ушло ли значение "введите данные" с дисплея bool Next = false; //нужно, чтобы мы знали, ввел ли пользователь второе значение
Далее создаем новый метод SecondOperand
, которое будет вставлять первый операнд с label в label2 (оно показывает второй операнд):
void SecondOperand(string lastOperand) //этот параметр будет значением { if (Start) { label.Text = "Введите второе\nзначение..."; //"\n" - новая строка label2.Text = lastOperand; Next = false; Start = false; IsThereFirstNumber = false; secondNumStart = true; } else label.Text = "Сначала введите\nпервое значение..."; //"\n" - новая строка }
Теперь добавляем вызов метода SecondOperand
в методы Summ
и Sub
с параметрами label.Text
:
private void Summ(object sender, EventArgs e) { MathOper = "+"; //говорим, что теперь активная операция - это сумма label1.Text = Convert.ToString(MathOper); //присваиваем label1 (активной операции) значение + if (!Next) SecondOperand(label.Text); //это против бага с бесконечным кол-вом операндов } private void Sub(object sender, EventArgs e) { MathOper = "-"; //тут код единтичен предыдущему, и комментарии не требуются label1.Text = Convert.ToString(MathOper); if (!Next) SecondOperand(label.Text); }
Также делаем "апгрейд" методу NumberChange
, т.е. добавляем проверку на "второе число", чтобы оно изменяло значение Start
или Next
в зависимости от ситуации:
private void NumberChange(object sender, EventArgs e) { var button = sender as Button; //берем Tag как носитель числа var num = button.Tag; if(secondNumStart) { if (Next) { Next = true; //показываем, что мы начали IsThereFirstNumber = true; //показываем, что теперь первое число есть label.Text += num; //добавляем число } else { label.Text = Convert.ToString(num); //меняем "введите второе значение" на число Next = true; IsThereFirstNumber = true; } } else { if (Start) { Start = true; //показываем, что мы начали IsThereFirstNumber = true; //показываем, что теперь первое число есть label.Text += num; //добавляем число } else { label.Text = Convert.ToString(num); //меняем "введите значение" на число Start = true; //показываем, что мы начали IsThereFirstNumber = true; } } }
Выполнение операции (или равно)
Теперь наша программа умеет записывать второй операнд, но нам также нужна главная функция калькулятора - вычисление операции. Для этого мы присвоим событию Click кнопки "=" метод Result
и открываем его код:
private void Result(object sender, EventArgs e) { if(secondNumStart) { FirstNum = Convert.ToInt32(label2.Text); //записываем первый операнд SecondNum = Convert.ToInt32(label.Text); //записываем второй операнд label.Text = MathOper == "+" ? quot;Результат:\n{FirstNum + SecondNum}": quot;Результат:\n{FirstNum - SecondNum}"; //проводим операцию с соответствующим оператором } }
У нас только два оператора, так что мы используем тернарный оператор, но если у нас их будет четыре (+, -, *, /) мы будем использовать оператор case
.
Конец урока
На этом всё! Надеюсь, вам понравилось. В следующем уроке будем менять шрифт текста с помощью панели меню! (или строки меню) До новых встреч!