Калькулятор windows forms на мові c # - програмування на c, c # і java

Колись ми вже створювали подібний калькулятор. але він був досить простенький і не мав загального TextBox'a для всіх чисел.

У даній статті ж ми створимо більш вдосконалений калькулятор Windows Forms. Отже, виглядати у нас він буде ось так:

Тут у нас 19 кнопок Button. 1 Textbox і ще 1 порожній Label (на малюнку він виділений). Застосування його буде описано нижче.

Отже, створюємо таку або схожу форму. Ми збільшили ширину TextBox'a. використовуючи MultiLine:

Також в Свойствах ми збільшили розмір шрифту в TextBox'e і Label'e до 12 пунктів.

Тепер робимо так, щоб при натисканні на цифрові кнопки, в TextBox'e з'являлася відповідна цифра.

Для цього двічі натискаємо на кнопці "0" і в розпочатому коді пишемо:

У рядку 3 ми присвоюємо першої змінної a то, що буде написано в TextBox'e (а саме число, яке введе користувач перед тим, як натиснути кнопку "+").

Потім TextBox очищається, число, введене користувачем, в ньому пропадає (але залишається у змінній a)

Змінної count присвоюється число 1, яка потім вкаже програмі, що саме операцію складання треба буде зробити з числами.

Потім в Label записується число з змінної a (той самий, який від початку ввів користувач) і знак плюса. Виглядати в формі це буде так, як описано нижче.

Користувач вводить якесь число:

Потім натискає на кнопку "+" і після цього бачить:

Крім того, як би не було дивним з першого погляду, ми присвоюємо змінної znak значення true. хоча вище, на початку коду, ми і так привласнювали це ж значення. Докладніше цю змінну ми опишемо нижче, але сенс в тому, що ми присвоюємо значення true. коли хочемо зробити введене число негативним, якщо воно позитивно, а значення false. коли хочемо зробити число позитивним, якщо воно негативне. Спочатку у нас вводяться позитивні числа, спочатку перше, потім друге. І якщо перше число ми зробимо негативним, то значення у znak перейде в false і тоді вийде, що другий доданок як би негативне (на практиці, просто щоб поставити перед ним мінус, доведеться натиснути двічі на відповідну кнопку, щоб з false значення перейшло в true . а потім назад з true в false. і з'явився знак мінуса).

Тут ми використовуємо конструкцію 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.

Код у неї елементарний:

Спочатку, як ми пам'ятаємо, у змінної znak варто значення true. Якщо ми натиснемо на кнопку перший раз, то в TextBox'e перед числом з'явиться знак "-". а змінної znak буде присвоєно значення false.

Якщо вдруге натиснути на цю кнопку, то, так як znak у нас false. відбудеться друга умова. Тут використовується метод Replace. який замінює будь-якої шматок рядка на інший. У дужках після методу спочатку пишеться, що буде замінено в рядку, а після коми, то, на що замінювати. В даному випадку ми замінюємо в TextBox'e мінус на порожнє значення.

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

Хотілося б дізнатися як обробити помилку ділення на 0.

При розподілі на 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 плюс 2 і потім ще раз натиснути на плюс 2. Порахує тільки 2 + 2. Як зробити щоб спочатку вважалося 1 + 2 потім 3 + 2

Дуже хороший, наочний урок.

А як зробити введення чисел з клавіатури? Ексепшн вискакує, а при натисканні мишкою все гуд

Доброго вам дня! Як зробити щоб не можна було повторно вводити кому?

Привіт, Євген.
Для заборони на введення додаткової коми з кнопки Button можна використовувати наступний код замість коду в button18_Click:
if (textBox1.Text.IndexOf ( ',') == -1)
textBox1.Text + = ",";
>

Для подібної заборони з клавіатури треба вибрати в TextBox'e подія KeyPress і написати в ньому:
if (e.KeyChar == ',')
if (textBox1.Text.IndexOf ( ',')! = -1)
e.Handled = true;
>
>

Привіт, а не підкажете, як зробити так, щоб цей калькулятор міг розуміти дужки?

Потрібно здійснити введення з клавіатури. Щоб вводилися тільки цифри. Допоможіть будь ласка.

Для початку ми створимо на самому початку програми кілька змінних, які нам для цього знадобляться:

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

Я не розібрався, де саме на початку програми, куди це писати. Роз'ясніть будь ласка.

У головному класі форми. Відразу після слів:

public partial class Form1. Form

Ласкаво часу доби. Хто може допомогти в створенні подоби калькулятора але фішка в тому що введення повинен бути з клавіатури 10-ти чисел і після натискання на кнопку повинна все числа скласти і дати остаточну відповідь.

Здравствуте, а як треба синус косинуси додавати?

Вітаю! Додайте ще потрібну кількість кнопок.

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

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

Зауважимо, що метод Sin приймає аргумент в радіанах.

А ось як його зберегти щоб потім їм можна було користуватися

Вам потрібно створити інсталятор в Visual Studio (див. Посилання), таким чином у Вас буде інсталяційний файл і з'явиться можливість скористатися калькулятором без використання IDE.

Привіт, велике спасибі за таку корисну статтю!) Підкажіть, будь ласка, який код необхідний для обчислення синуса кута (припустимо в 30 градусів і т.п.)? Крім того, зведення в ступінь (будь-якого числа в будь-яку ступінь), обчислення кореня, розрахунок натурального лагоріфма і факторіала числа? Чи потрібно при цьому щось додавати крім як в саму кнопку?

Для обчислення синуса спочатку необхідно перевести градуси в радіани:

double degree = 30;
double rad = degree * Math.PI / 180;

Потім обчислити синус за допомогою статичного методу класу Math:

Зведення числа a до степеня b. Math.Pow (a, b);

Обчислення квадратного кореня: Math.Sqrt (a);

Натуральний логарифм: Math.Log (a);

Факторіал обчислюється за допомогою циклу або рекурсії. Приклад: Рекурсивне обчислення факторіала.

Крім коду кнопок доведеться також відредагувати метод calculate ().