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

Некогда мы уже создавали подобный калькулятор, но он был довольно простенький и не имел общего TextBox’a для всех чисел.

В данной статье же мы создадим более усовершенствованный калькулятор Windows Forms.Итак, выглядеть у нас он будет вот так:

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

Здесь у нас 19 кнопок Button, 1 Textbox и ещё 1 пустой Label (на рисунке он выделен). Применение его будет описано ниже.

Итак, создаём такую или похожую форму. Мы увеличили ширину TextBox’a, используя MultiLine:

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

 

Также в Свойствах мы увеличили размер шрифта в TextBox’e и Label’e до 12 пт.

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

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

Для этого дважды кликаем на кнопке “0” и в открывшемся коде пишем:

Проверяем, несколько раз нажав на кнопку “0” у нас в форме.

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

Работает. Делаем то же самое с остальными цифровыми кнопками:

Таким же образом кликаем дважды на кнопку “.” в форме. Она будет использоваться для создания десятичной дроби. Пишем следующий код:

Кнопки нажимаются, в TextBox’e отображаются нажатые цифры. Теперь надо научить программу производить с ними какие-либо операции. Как видно из формы, наш калькулятор сможет производить стандартные математические операции: сложение, вычитание, умножение и деление. Для начала мы создадим  в самом начале программы несколько переменных, которые нам для этого понадобятся:

Первым двум переменным будут присваиваться значения, набранные пользователем в калькуляторе. В последствии с ними будут производиться нужные математические операции. Тип float – это тип с плавающей точкой, позволяющий работать с десятичными дробями, что нам, безусловно, нужно при наличии кнопки “.” .

Благодаря второй переменной мы будем давать программе указания, какую именно операцию производить с переменными, описанными выше. Здесь нам не нужна дробь, поэтому обойдёмся целочисленным типом int.

Последняя переменная znak нам понадобится для того, чтобы менять знаки у введённых чисел. Тип bool может иметь два значения – ture и false. Мы представим, что если znak имеет значение true в программе, то это означает, что у числа знак +, если false – число отрицательное и перед собой имеет знак -. Изначально в калькуляторе вбиваются положительные числа, поэтому мы сразу присвоили переменной значение true.

Далее мы дважды нажимаем на кнопку “+”, обозначающую сложение, на форме и пишем следующий код:

В строке 3 мы присваиваем первой переменной a то, что будет написано в TextBox’e (а именно число, которое введёт пользователь перед тем, как нажать кнопку “+”).

Затем TextBox очищается, число, введённое пользователем, в нём пропадает (но остаётся в переменной a)

Переменной count присваивается число 1, которая потом укажет программе, что именно операцию сложения надо будет произвести с числами.

Затем в Label записывается число из переменной (то самое, которое изначально ввёл пользователь) и знак плюса. Выглядеть в форме это будет так, как описано ниже.

Пользователь вводит какое-либо число:

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

Затем нажимает на кнопку “+” и после этого видит:

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

Кроме того, как бы не было странным с первого взгляда, мы присваиваем переменной znak значение true, хотя выше, в начале кода, мы и так присваивали это же значение. Подробнее данную переменную мы опишем ниже, но смысл в том, что мы присваиваем значение true, когда хотим сделать введённое число отрицательным, если оно положительно, а значение false, когда хотим сделать число положительным, если оно отрицательное. Изначально у нас вводятся положительные числа, сначала первое, потом второе. И если первое число мы сделаем отрицательным, то значение у znak перейдёт в false и тогда получится, что второе слагаемое как бы отрицательное (на практике, просто чтобы поставить перед ним минус, придётся нажать дважды на соответствующую кнопку, чтобы с false значение перешло в true, а затем обратно с true в false, и появился знак минуса).

Подобным образом заполняем код для кнопок “-“, “*” и “/”:

Разница лишь в значении переменной 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.

Код у неё элементарный:

На очереди у нас кнопка “<–“. Она будет удалять последнюю цифру записанного в TextBox’e числа. Код:

Мы вводим новую переменную lenght целочисленного типа и записываем в неё количество символов в TextBox’e минус один символ.

Также мы вводим новую переменную text, в которую полностью заносим текст из TextBox’а. Затем мы очищаем TextBox и вводим цикл for, через который записываем в TextBox строку text, но уже на символ короче.

Например, в TextBox’e записано число 504523

При нажатии на кнопку “<–“ в переменную lenght записывается число 5 (6 цифр – 1), в переменную text записывается строка “504523”TextBox очищается, а затем в него по одному записываются символы из text, но в этот раз их будет не 6, а 5, то есть в TextBox’e появится число 50452.

У нас остаётся последняя кнопка, которая отвечает за знак первого слагаемого. Переходим к её коду. Тут мы будет работать с переменной znak, которую описывали выше. Код выглядит вот так:

Изначально, как мы помним, у переменной znak стоит значение true. Если мы нажмём на кнопку первый раз, то в TextBox’e перед числом появится знак “-“, а переменной znak будет присвоено  значение false.

Если второй раз нажать на данную кнопку, то, так как znak у нас false, произойдёт второе условие. Здесь используется метод Replace, который заменяет какой-либо кусок строки на другой. В скобках после метода вначале пишется, что будет заменено в строке, а после запятой, то, на что заменять. В данном случае мы заменяем в TextBox’e минус на пустое значение.

Вот и всё, наш калькулятор Windows Forms готов! Можно его тестировать!

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

Если у Вас возникнут вопросы или просьбы по данной программе, можете оставить комментарий под этой записью. А исходный код калькулятора можно скачать ниже:

Скачать исходник

 

 

Калькулятор Windows Forms на языке C#
4.82 (96.36%) 22 votes

Поделиться в соц. сетях:

17 комментария(ев) к статье “Калькулятор Windows Forms на языке C#

    1. admin

      При делении на 0 в качестве результата автоматически возвращается строка “бесконечность” (infinity).
      Но можно и обработать данную ситуацию в программе, например, так (в методе calculate):
      case 4:
      float divider;
      divider = float.Parse(textBox1.Text);
      if (divider == 0.0)
      MessageBox.Show(“Внимание! Деление на ноль!”);
      else
      {
      b = a / divider;
      textBox1.Text = b.ToString();
      }
      break;
      Теперь при делении на 0 отобразится MessageBox с предупреждением.

  1. Камил

    А что делать, если например: 1 плюс 2 и потом еще раз нажать на плюс 2. Посчитает только 2 + 2. Как сделать чтобы сначала считалось 1+2 потом 3+2

  2. Женя

    А как сделать ввод чисел с клавиатуры? Эксепшн выскакивает, а при нажатии мышкой всё гуд

  3. Евгений

    Доброго времени суток! Как сделать чтобы нельзя было повторно вводить запятую?

    1. Юлия Автор статьи

      Здравствуйте, Евгений.
      Для запрета на ввод дополнительной запятой с кнопки Button можно использовать следующий код вместо кода в button18_Click:
      if (textBox1.Text.IndexOf(‘,’) == -1)
      {
      textBox1.Text += “,”;
      }

      Для подобного запрета с клавиатуры надо выбрать в TextBox’e событие KeyPress и написать в нём:
      if (e.KeyChar == ‘,’)
      {
      if (textBox1.Text.IndexOf(‘,’) != -1)
      {
      e.Handled = true;
      }
      }

  4. Сергей

    Здравствуйте, а не подскажете, как сделать так, чтобы этот калькулятор мог понимать скобки?

  5. Анна

    Нужно осуществить ввод с клавиатуры. Чтобы вводились только цифры. Помогите пожалуйста!!!

  6. Осман

    Для начала мы создадим в самом начале программы несколько переменных, которые нам для этого понадобятся:

    float a, b;
    int count;
    bool znak = true;

    Я не разобрался, где именно в начале программы, куда это писать??? Разъясните пожалуйста.

  7. Илья

    Добро времени суток. Кто может помочь в создании подобия калькулятора но фишка в том что ввод должен быть с клавиатуры 10-ти чисел и после нажатия на кнопку должна все числа сложить и дать окончательный ответ.

    1. admin

      Здравствуйте! Добавьте еще нужное количество кнопок.

      Код (в самой кнопке), вычисляющий, например, синус, будет таким:

      double result = Math.Sin(Convert.ToDouble(textBox1.Text));
      textBox1.Text = result.ToString();

      Заметим, что метод Sin принимает аргумент в радианах.

Добавить комментарий для Евгений Отменить ответ

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">