Колись ми вже створювали подібний калькулятор. але він був досить простенький і не мав загального 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 ().