В качестве разминочного проекта было решено написать простейший калькулятор
Чтобы было понимание что должно получиться напишем требование к приложению:
1. Платформа: WInForms
2. Функционал:
2.1. Стандартные арифметические действия (сложение, вычитание, умножение, деление);
2.2. Вычисление sin, cos, tg, ctg;
2.3. Возможность ввода выражения с клавиатуры (без тригонометрических функций);
2.4. Необходимо ограничить возможность ввода любых символов с клавиатуры или буфера кроме цифр и знаков действий (тригонометрические функции нельзя ввести с клавиатуры)
Да, это пишется за 10 минут и не требует большой мозговой активности, но это просто разминка перед написанием чего-то более менее серьёзного, чтобы вспомнить что и как писать.
Возможно пост окажется полезен таким же начинающим C# программистам как я.
Инструментом для написания приложения выступит VS Community 2019
Для начала был собрал следующий макет в конструкторе форм:
Для того чтобы не париться с переименованием элементов формы я изменил имя только для поля TextBox на "txb", а чтобы все это работало написал пару обработчиков для действий с числами и собственно возможности ввода этих чисел:
Для кнопок действий:
private void LogickBtnClick(object sender, EventArgs e)
{
Button btn = sender as Button;
try { input = Convert.ToDouble(txb.Text); }
catch { input = 0; }
switch (btn.Text)
{
case "C": output = 0; txb.Clear(); break;
case "sin": output = Math.Sin(input * ToRadians); txb.Text = output.ToString(); break;
case "cos": output = Math.Cos(input * ToRadians); txb.Text = output.ToString(); break;
case "tg": output = Math.Tan(input * ToRadians); txb.Text = output.ToString(); break;
case "ctg": output = 1 / Math.Tan(input * ToRadians); txb.Text = output.ToString(); break;
case "←": try { txb.Text = txb.Text.Substring(0, txb.TextLength - 1); } catch { } break;
case "+": d = 1; output = input; txb.Clear(); break;
case "-": d = 2; output = input; txb.Clear(); break;
case "*": d = 3; output = input; txb.Clear(); break;
case "/": d = 4; output = input; txb.Clear(); break;
case "=":
switch (d)
{
case 1: output += input; txb.Clear(); break;
case 2: output -= input; txb.Clear(); break;
case 3: output *= input; txb.Clear(); break;
case 4: output /= input; txb.Clear(); break;
}
txb.Text = output.ToString(); output = 0; break;
}
}
Для Num клавиатуры:
private void Num(object sender, EventArgs e)
{
Button btn = sender as Button;
bool add = true;
for (int i = 0; i < txb.TextLength; i++)
{
if (btn.Text == ","&& txb.Text[i] == ',') { add = false; }
}
switch (add)
{
case true: txb.Text += btn.Text; break;
case false: break;
}
}
На самом деле обработчик Num можно написать всего в 2-3 строки, если воспользоваться регулярными выражениями, но как-то лень (гораздо проще написать 8 строк простейшего кода).
Простейший калькулятор готов.
Конечно его можно усложнить, добавив возможность ввода с клавиатуры и расширив базовый функционал, но для первого приложения, после столь длительного перерыва, думаю сойдет.
Если код кривой, напишите пожалуйста, что и как можно или нужно исправить.
Скачать исходник можно здесь.