Курс по 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.
Конец урока
На этом всё! Надеюсь, вам понравилось. В следующем уроке будем менять шрифт текста с помощью панели меню! (или строки меню) До новых встреч!