Калькулятор на основі комбінованого списку ComboBox

Елемент управління ComboBox служить для відображення варіантів вибору у списку. Продемонструємо роботу цього елемента управління на прикладі програми, що реалізує функції калькулятора. Тут для відображення варіантів вибору арифметичних операцій використовується комбінований список ComboBox.

Для початку завантажимо Visual Studio 2010 та обиремо пункт меню Файл – Создать проект (File | New | Project).  У наступному вікні New Project обираємо пункт Visual Basic, а потім в області шаблонів (середня колонка) обираємо шаблон (Templates) Windows Forms Application. В якості назви проекту введемо ім’я Список ComboBox і натиснемо кнопку ОК.

З панелі Toolbox перетягнемо в форму два текстових поля TextBox, кнопку Button, мітку Label і комбінований список ComboBox. В результаті отримаємо форму наступного вигляду:

 

Текст програми представлений в лістингу:

 Public Class Form1

    'Програма реалізує найпростіший калькулятор,

    'причому для вибору математичних операцій використовується

    'комбінований список ComboBox

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _

                            Handles MyBase.Load

        'Задаємо початкові властивості елементам керування:

        Me.Text = "Список ComboBox"

        Button1.Text = "Відкрити список"

        ComboBox1.Text = "Виберіть дію"

        Label1.Font = New Font("Cansolas", 12.0F)

        Label1.Text = "Дорівнює: "

        TextBox1.Clear()

        TextBox2.Clear()

        'задаємо табличні індекси для елементів керування:

        TextBox1.TabIndex = 0

        TextBox2.TabIndex = 1

        ComboBox1.TabIndex = 2

        Button1.TabIndex = 3

        'Задаємо значення елементам випада.чого списку, використовуючи масим

        Dim Дії() = {"Додати", "Відняти", "Помножити", "Поділити", "Очистити"}

        ComboBox1.Items.AddRange(Дії)

    End Sub

    'Обробка події зміни елементу випадаючого списку

    Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, _

                                        ByVal e As System.EventArgs) _

                                        Handles ComboBox1.SelectedIndexChanged

        'Перетворення чисел з рядка в число методом TryParse

        Dim X, Y, Z As Single

        Z = 0

        Dim число1 = Single.TryParse(TextBox1.Text, _

                      System.Globalization.NumberStyles.Number, _

                      System.Globalization.NumberFormatInfo.CurrentInfo, X)

        Dim число2 = Single.TryParse(TextBox2.Text, _

                      System.Globalization.NumberStyles.Number, _

                      System.Globalization.NumberFormatInfo.CurrentInfo, Y)

        'Якщо одне з введених значень не є числом виводимо повідомлення

        'та виходимо з процедури

        If число1 = False Or число2 = False Then

            MessageBox.Show("Потрібно вводити числа", "Помилка введення", _

                              MessageBoxButtons.OK, MessageBoxIcon.Error)

            Exit Sub

        End If

 

        'Якщо немає помилки, виконуємо обчислення

        'використовуючи оператор множинного вибору Select Case

        Select Case ComboBox1.SelectedIndex

            Case 0 ' "Додати"

                Z = X + Y

            Case 1 '"Відняти"

                Z = X - Y

            Case 2 ' "Помножити"

                Z = X * Y

            Case 3 '"Поділити"

                Z = X / Y

            Case 4 '"Очистити"

                TextBox1.Clear()

                TextBox2.Clear()

                Label1.Text = "Дорівнює: "

                Exit Sub

        End Select

        'Виводимо обчислене значення в текстову мітку за допомогою

        'методу String.Format, з точністю 5 знаків після коми:

        Label1.Text = String.Format("Дорівнює: {0:F5}", Z)

    End Sub

 

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _

                               Handles Button1.Click

        'Примусово відкриваємо список, клікаючи по кнопці

        ComboBox1.DroppedDown = True

    End Sub

End Class

 У даній програмі відразу при обробці події завантаження форми ми присвоюємо початкові значення деяким властивостям, в тому числі задаємо колекцію елементів комбінованого списку: "Додати", "Відняти" і т. д. Тут також задамо табличні індекси TabIndex для текстових полів і комбінованого списку.

Табличний індекс визначає порядок обходу елементів. Так, при старті програми фокус буде перебувати в першому текстовому полі, оскільки ми призначили TextBox1.TabIndex = 0. Далі при натисканні користувачем клавіші <Tab> відбуватиметься перехід від елемента до елементу відповідно табличним індексам.

При обробці події "зміна індексу вибраного елемента" ComboBox1_SelectedIndexChanged за допомогою функції TryParse перевіряємо, чи можна текстове поля перетворити в число. Першим параметром методу TryParse є аналізоване поле. Другий параметр - це дозволений для перетворення стиль числа, в даному випадку типу Number, тобто  десяткове число, яке має цілу і дробову частини. Третій параметр вказує, на якій основі формується допустимий формат, - в нашому випадку ми використовували CurrentInfo, тобто на основі поточної мови і регіональних параметрів.

Примітка

За замовчуванням при інсталяції руcіфікованних версій Windows XP і Windows 7 роздільником цілої та дробової частини числа приймається кома. Однак цю установку можна змінити, якщо в Панелі управління вибрати опцію Мова і регіональні стандарти, потім на вкладці Формати клацнути на кнопці Додаткові параметри і  вказати як роздільник цілої та дробової частин замість коми - точку. В обох випадках (і для коми, і для точки) метод TryParse буде працювати так, як вказано на вкладці Формати.

Четвертий параметр методу TryParse повертає результат перетворення. Крім того, функція TryParse повертає булеву змінну True або False, яка повідомляє, чи успішно виконано перетворення. Як видно з тексту програми, якщо хоча б одне поле неможливо перетворити в число, то програмуємо повідомлення "Слід вводити числа!" і вихід з процедури обробки події за допомогою оператора Exit Sub.

 

Далі оператор Select Case здійснює множинний вибір арифметичної операції в залежності від індексу вибраного елементу списку SelectedIndex.

Оператор Select Case передає управління тій чи іншії мітці Case. Причому, оператор множинного вибору в Basic «не провалюється», як кажуть програмісти, на відміну від C-подібних мов (С ++, C #, Turbo C). Тобто управління, зайшовши на будь-яку мітку Case, не переходить на наступну позначку, а відразу передається в кінець оператора Select Case.

Останній оператор в процедурі обробки події зміни індексу вибраного елемента здійснює формування рядка за допомогою методу String.Format для виведення її на мітку Label1. Формат "{0: F5}" означає, що значення змінної Z слід виводити за фіксованим форматом з п'ятьма знаками після коми (або точки). Зауважте, в цьому прикладі навіть не довелося програмувати події ділення на нуль. Система Visual Studio зробила це за нас.

Остання процедура обробки події "клацання на кнопці" забезпечує розкриття комбінованого списку через натискання на кнопку, а не на стрілку в елементі ComboBox. Ця можливість реалізована за допомогою методу DroppedDown об'єкта ComboBox1.

Результат роботи програми зображений на рисунку: