Как написать простой калькулятор ч.1
Добрый день.
Создадим свой собственный простенький калькулятор. Будем использовать один файл класса.
Создаем новый проект, кидаем на формачку кнопочки для калькулятора (рис. 1):

Заполняем теги в свояствах кнопки(рис. 2):

Создаем файл по класс с именем «myCalc». Определяем переменные и создаем пустышки для функций:
private float enterNum = 0;
private float memNum = 0;
public float _enterNum { set { enterNum = value; } }
public float _memNum { set { memNum = value; } }
public float dois()
{
float val=0;
return val;
}
private float plus()
{
float val = 0;
return val;
}
private float minus()
{
float val = 0;
return val;
}
private float divide()
{
float val = 0;
return val;
}
private float multiply()
{
float val = 0;
return val;
}
public void clearMem()
{
memNum = 0;
}В форме необходимо сделать ссылку на объект класса и создать переменную для ввода значений:
private myCulc mC = new myCulc(); private string Num = ""; private string Do = "";
На каждую кноппку калькулятора создадим событие «Action-Click» (рис. 3)

В этом событии необходимо будет ссылаться на процедуру, которая будет распознавать какое действие нам необходимо сделать (сложение, вычитание, умножение или деление). Также в событии будет присваиваться переменной «Num» тэг кнопки чисел, а «Do» действие. Для числовых кнопок пропишем следующее:
private void bt1_Click(object sender, EventArgs e)
{
Num += this.bt1.Tag.ToString();
upEn();
}Для кнопок действия:
Do = btP.Tag.ToString(); upDo();
Допишим пару процедур для нашего удобства:
private void upDo()
{
Num = this.txtEnNum.Text;
if (!checkMem())
{
return;
}
Num = "";
this.txtEnNum.Text = Num;
}Создадим две функцию проверки. Одну для вводимого числа, другую для запоминаемого:
private bool checkEn()
{
try
{
mC._enterNum = Convert.ToSingle(Num);
}
catch(System.Exception errAll)
{
MessageBox.Show("Значение числа введено неккоректно");
return false;
}
return true;
}
private bool checkMem()
{
try
{
mC._memNum = Convert.ToSingle(Num);
}
catch (System.Exception errAll)
{
MessageBox.Show("Значение числа введено неккоректно");
return false;
}
return true;
}Дадим действие для двух процедур. Первая для расчета, другая для очистки:.
private void go()
{
if (!testEn())
{
return;
}
this.txtEnNum.Text = mC.dois(Do).ToString();
clear();
}
private void clear()
{
Num = "";
mC.clearMem();
}Для кнопки равно:
private void button12_Click(object sender, EventArgs e)
{
Num = this.txtEnNum.Text;
go();
}Все действия со стороны формы выполнены, теперь необходимо заполнить все функции смыслом. Начем с функции, которая распределяет действия, воспользовавшись конструкцией выбора «if else if»:
public float dois(string Do)
{
float val=0;
memNum = enterNum;
if (Do == "+")
{
val = plus();
}
else if (Do == "-")
{
val = minus();
}
else if (Do == "/")
{
val = divide();
}
else if (Do == "*")
{
val = multiply();
}
else
{
val = 0;
}
memNum = val;
return val;
}Доделаем функции действия и переключатель для действий:
public float dois(string Do)
{
float val=0;
if (Do == "+")
{
val = plus();
}
else if (Do == "-")
{
val = minus();
}
else if (Do == "/")
{
val = divide();
}
else if (Do == "*")
{
val = multiply();
}
else
{
val = 0;
}
return val;
}
private float plus()
{
float val = 0;
val = memNum + enterNum;
return val;
}
private float minus()
{
float val = 0;
val = memNum - enterNum;
return val;
}
private float divide()
{
float val = 0;
val = memNum / enterNum;
return val;
}
private float multiply()
{
float val = 0;
val = memNum * enterNum;
return val;
}
public void clearMem()
{
memNum = 0;
}Теперь можно запустить проект и проверить его на работоспособность. У нас получился самый простенький калькулятор. В следующих статьях мы его немного усложним работая уже с имеющиейся основой.
Доброго дня