
Калькулятор Windows Forms на языке C#

Простой калькулятор Windows Forms на C#
Наш калькулятор основан на взаимодействии двух чисел, поэтому математические операции будут следующие:
Сложение
Вычитание
Умножение
Деление
Возведение первого числа в степень второго
Взятие корня первого числа степени второго числа.
Итак, после того, как с графическим оформлением закончено, приступаем к самому коду.
Для всех вышеописанных операций мы создадим отдельные функции. Функции – это, так сказать, подпрограммы в самой программе, выполняющие отдельные задачи. Они помогают сократить и облегчить код.

Функция сложения
public static double sum ( double a , double b )
{
return a + b ;
}
Для начала мы объявляем программе, что создаем функцию (пишем public static ), затем определяем тип функции( double – числовой тип повышенной точности с плавающей запятой, лучший вариант), после даём имя функции( sum ) и в скобках записываем то, что, так сказать, получает функция от программы( double a и double b – первое и второе числа, которые мы запишем в первые два TextBox’a ). Выражение return возвращает в функцию результат сложения a и b . То есть наша функция получает два числа от пользователя, который введет их в форме и, при помощи return’a , в неё же заносится результат вычисления.

Функция вычитания
public static double razn ( double a , double b )
{
return a - b ;
}

Функция умножения
public static double umnog ( double a , double b )
{
return a * b ;
}

Функция деления
public static double del ( double a , double b )
{
return a / b ;
}

Функция возведения в степень
public static double step ( double a , double b )
{
return Math . Pow ( a , b );
}

Функция извлечения корня
public static double koren ( double a , double b )
{
return Math . Pow ( a, 1/b );
}
Функции созданы, сталось лишь привязать их к кнопкам в форме. Дважды щёлкаем мышью в форме на первую кнопку. Нас переносит в часть кода, которая отвечает за событие, которое произойдет, когда пользователь кликнет на данную кнопку. В теле этого события мы пишем:

private void button1_Click(object sender, EventArgs e)
{
textBox3.Text = Convert.ToString(sum(Convert.ToDouble(textBox1.Text), Convert.ToDouble(textBox2.Text)));
}
Разбор кода начнём, как ни странно, с конца. Мы помним, что при объявлении функции мы писали вот такую часть кода: sum(double a, double b) . То есть функция может получить только значения типа double . Также мы помним, что эти значения мы получаем от пользователя, который, в свою очередь, вводит их в первый и второй TextBox’ы. Однако проблема в том, что значения из TextBox’ов воспринимаются программой как строки, то есть типом string . Поэтому их надо конвертировать в нужный нам double , что мы и делаем: sum(Convert.ToDouble(textBox1.Text),Convert.ToDouble(textBox2.Text))

private void button2_Click(object sender, EventArgs e)
{
textBox3.Text = Convert.ToString(razn(Convert.ToDouble(textBox1.Text), Convert.ToDouble(textBox2.Text)));
}

private void button3_Click(object sender, EventArgs e)
{
textBox3.Text = Convert.ToString(umnog(Convert.ToDouble(textBox1.Text), Convert.ToDouble(textBox2.Text)));
}

private void button4_Click(object sender, EventArgs e)
{
textBox3.Text = Convert.ToString(del(Convert.ToDouble(textBox1.Text), Convert.ToDouble(textBox2.Text)));
}

private void button5_Click(object sender, EventArgs e)
{
textBox3.Text = Convert.ToString(step(Convert.ToDouble(textBox1.Text), Convert.ToDouble(textBox2.Text)));
}

private void button6_Click(object sender, EventArgs e)
{
textBox3.Text = Convert.ToString(koren(Convert.ToDouble(textBox1.Text), Convert.ToDouble(textBox2.Text)));
}


Усложненный калькулятор
Здесь у нас 19 кнопок Button , 1 Textbox и ещё 1 пустой Label

Создаём форму. Увеличим ширину TextBox’a , используя MultiLine :

Также в Свойствах мы увеличили размер шрифта в TextBox’e и Label’e до 12 пт.
Теперь делаем так, чтобы при нажатии на цифровые кнопки, в TextBox’e появлялась соответствующая цифра.

Для этого дважды кликаем на кнопке “0” и в открывшемся коде пишем
private void button17_Click(object sender, EventArgs e)
{
textBox1.Text = textBox1.Text + 0;
}

private void button13_Click(object sender, EventArgs e)
{
textBox1.Text = textBox1.Text + 1;
}

private void button14_Click(object sender, EventArgs e)
{
textBox1.Text = textBox1.Text + 2;
}

private void button15_Click(object sender, EventArgs e)
{
textBox1.Text = textBox1.Text + 3;
}

private void button9_Click(object sender, EventArgs e)
{
textBox1.Text = textBox1.Text + 4;
}

private void button10_Click(object sender, EventArgs e)
{
textBox1.Text = textBox1.Text + 5;
}

private void button11_Click(object sender, EventArgs e)
{
textBox1.Text = textBox1.Text + 6;
}

private void button5_Click(object sender, EventArgs e)
{
textBox1.Text = textBox1.Text + 7;
}

private void button6_Click(object sender, EventArgs e)
{
textBox1.Text = textBox1.Text + 8;
}

private void button7_Click(object sender, EventArgs e)
{
textBox1.Text = textBox1.Text + 9;
}

private void button18_Click(object sender, EventArgs e)
{
textBox1.Text = textBox1.Text + ",";
}

float a, b;
int count;
bool znak = true;
Кнопки нажимаются, в TextBox’e отображаются нажатые цифры. Теперь надо научить программу производить с ними какие-либо операции. Как видно из формы, наш калькулятор сможет производить стандартные математические операции: сложение, вычитание, умножение и деление. Для начала мы создадим в самом начале программы несколько переменных, которые нам для этого понадобятся:

Кнопка «+»
Первым двум переменным будут присваиваться значения, набранные пользователем в калькуляторе. В последствии с ними будут производиться нужные математические операции. Тип float – это тип с плавающей точкой, позволяющий работать с десятичными дробями, что нам, безусловно, нужно при наличии кнопки “.” .
Благодаря второй переменной мы будем давать программе указания, какую именно операцию производить с переменными, описанными выше. Здесь нам не нужна дробь, поэтому обойдёмся целочисленным типом int .
Последняя переменная znak нам понадобится для того, чтобы менять знаки у введённых чисел. Тип bool может иметь два значения – ture и false . Мы представим, что если znak имеет значение true в программе, то это означает, что у числа знак + , если false – число отрицательное и перед собой имеет знак - . Изначально в калькуляторе вбиваются положительные числа, поэтому мы сразу присвоили переменной значение true .
Далее мы дважды нажимаем на кнопку “+” , обозначающую сложение, на форме и пишем следующий код:

Кнопка «-»
В строке 3 мы присваиваем первой переменной a то, что будет написано в TextBox’e (а именно число, которое введёт пользователь перед тем, как нажать кнопку “+” ).
Затем TextBox очищается, число, введённое пользователем, в нём пропадает (но остаётся в переменной a )
Переменной count присваивается число 1, которая потом укажет программе, что именно операцию сложения надо будет произвести с числами.
Затем в Label записывается число из переменной a (то самое, которое изначально ввёл пользователь) и знак плюса. Выглядеть в форме это будет так, как описано ниже.
Пользователь вводит какое-либо число:

Кнопка «*»

Кнопка «/»
Разница лишь в значении переменной count и в том, какой знак добавляется в Label’e .
Далее нам понадобится создать функцию, которая будет применять нужные нам математические операции к числам. Назовём её calculate . Но перед этим мы кликнем дважды на кнопку “=” на форме и в коде к ней мы запишем:

Кнопка «=»
То есть, при нажатии пользователем на кнопку “=” , как раз выполнится наша функция подсчёта calculate , и, заодно, очистится Label , так как результат мы в будущем коде выведем в TextBox .
Теперь-таки создаём нашу функцию calculate и пишем следующий код:
Здесь мы используем конструкцию switch-case .
Switch – это оператор управления. Он может включать в себя несколько case’ов . Case – метки, от значения которых зависит, какие операции будут происходить.
Строка switch(count) означает, что именно от значения count будет зависеть, какое действие будет происходить в коде switch’a .
Итак, если count=1 (в коде case 1: ), то произойдёт следующее:
После того, как пользователь нажал “+” , он, естественно, должен ввести второе слагаемое, что он и делает по стандартному сценарию, а затем нажать кнопку “=” (и в ней, как мы помним, как раз выполнится наша функция).
Как только кнопка “=” будет нажата, программа сложит число из переменной a с тем вторым слагаемым, которое записал пользователь в TextBox , и запишет результат в переменную b (строка 6 кода функции). В строке 7 программа выведет в TextBox результат сложения – переменную b .
Оператор break (строка 8) завершает исполнение кода switch при выполнении кода метки case 1 , так как больше нам в нём делать нечего.
Точно так же строится алгоритм при case 2 , case 3 и case 4 с той разницей, что в них происходит не сложение, а вычитание, умножение и деление соответственно.
Оператор default срабатывает, если вдруг что-то пойдёт не по плану и count примет какое-либо иное значение, не описанное в switch . Тогда срабатывает лишь оператор break .
Львиная доля программы готова. Нам надо лишь написать код для трёх оставшихся нетронутыми до этого время кнопок.
Дважды жмём в форме на кнопку “С” . Она будет очищать все записи из TextBox’a и Label’a .

Кнопка «С»

Кнопка « »

Кнопка «+/-»
