Введення даних через текстове поле TextBox з перевіркою типу методом TryParse

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

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

Далі з панелі елементів керування Toolbox (якщо в даний момент її не видно, то панель елементів керування можна викликати за допомогою комбінації клавіш <Ctrl>+<Alt>+<x> або меню Вид – Другие окна – Панель элементов (View | Toolbox) в форму вказівником миші перетягнемо текстове поле TextBox, мітку Label та командну кнопку Button. Помістити елементи на форму можна також подвійним кліком миші на кожному елементі в панелі елементів керування  Toolbox. Таким чином на формі будуть знаходитись три елемента керування. Розмістимо їх так, як вказано на рис.1:

Тепер потрібно змінити деякі властивості елементів керування. Це зручно зробити при обробці події завантаження форми. Щоб отримати порожній обробник події завантаження форми, двічі клацніть в екранної межах форми.

Відразу після цього ми потрапляємо на вкладку програмного коду Form1.vb.

 Тут задаємо властивості форми (до форми звертаємось засобом посилання  MyClass), командної кнопки Button1, текстового поля TextBox1 та мітки Label1 наступні значення:

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

   MyClass.Text = "Корінь числа" 'Назва форми

   Button1.Text = "Знайти корінь" 'Підпис на кнопці

   TextBox1.Clear() 'Очистка текстового поля

   Label1.Text = Nothing 'Задаємо текстовій мітці порожнє значення

'Можна використати інший спосіб:

'Label1.Text = String.Empty

 Натиснемо клавішу <F5> для виявлення можливих описок (синтаксичних помилок) та попереднього перегляду дизайну майбутньої форми

 

Тепер потрібно запрограмувати подію-клік на кнопці «Знайти корінь». Створити порожній обробник цієї події зручно двічі клікнувши по цій кнопці на вкладці дизайнера форми. Між двома стрічками програмуємо діагностику вірності введених даних, перетворення рядкової змінної в змінну типу Single і безпосередньо знаходження кореня:

 Public Class Form1

    'Програм вводить через текстове поле TextBox число, при натисненні кнопки

    'знаходить з нього квадратний корінь та виводить його в текстову мітку Label.

    'У випадку, коли введене значення не є числом, повідомляє про це користувача.

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

                           Handles MyBase.Load

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

        MyClass.Text = "Корінь числа" 'Назва форми

        Button1.Text = "Знайти корінь" 'Підпис на кнопці

        TextBox1.Clear() 'Очистка текстового поля

        Label1.Text = Nothing 'Задаємо текстовій мітці порожнє значення

        'Можна використати інший спосіб:

        'Label1.Text = String.Empty

    End Sub

 

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

                                Handles Button1.Click

        'Оголосимо необхідні змінні:

        Dim X As Single 'Змінна з якої добуватимемо корінь

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

        'використовуючи метод TryParse

        Dim Перевірка As Boolean = Single.TryParse(TextBox1.Text, _

                                          Globalization.NumberStyles.Number, _

                                                                                 Globalization.NumberFormatInfo.CurrentInfo, X)

        'Метод TryParse має ряд ключових параметрів:

        '1 - вказує на введене значення;

        '2 - визначає дозволений стиль числа;

        '3 - форматує число на основі поточних значень мови та регіональних налаштувань

        '4 - вказує змінну в якій буде записано відформатоване число

 

        'Якщо введене значення не є числом, виведемо повідомлення про це:

        If Перевірка = False Then

            Label1.Text = "Потрібно вводити числа" 'виводимо повідомлення про помилку введення

            Label1.ForeColor = Color.Red 'Задаємо напису червоний колір тексту

            Exit Sub 'вихід з процедури

            'Return - а можна і так!

        End If

        'Перевіримо чи введене число є від'ємним:

        If X < 0 Then

            'Виведемо повідомлення про неможливість знаходження кореня з від'ємного числа:

            Label1.Text = String.Format("Кореня з {0} не існує!", X)

            Label1.ForeColor = Color.Red

            Return

        End If

        'Знайдемо корінь квадратний з введеного числа

        'Для цього створимо нову змінну та присвоїмо їй значення квадратного кореня:

        Dim Y = CType(Math.Sqrt(X), Single)

        'Виведемо значення знайденого кореня в текстову мітку:

        Label1.ForeColor = Color.Black 'Задаємо чорний колір шрифту

        Label1.Text = String.Format("Корінь з {0}  рівний {1:F5}", X, Y)

        'Метод String.Format дозвиляє вивести результат виконання програми

        'з точністю до 5 знаків {1:F5}

    End Sub

End Class

 Тут при обробці події «клік мишею» на кнопці Знайти корінь проводиться перевірка, чи дійсно число введено в текстове поле. Перевірка здійснюється за допомогою функції TryParse. Першим параметром методу TryParse є поле, що потребує аналізу TextBox1.Text. Другий параметр – це дозволений стиль числа, воно може бути цілого типу (Integer), шістнадцятковим (HexNumber), представлене в експоненціальному вигляді і т.д. Третій параметр вказує на якій основі формується допустимий формат, - в даному випадку було використано CurrentInfo, тобто на основі поточної мови та регіональних параметрів. 

Примітка

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

Четвертий параметр методу TryParse повертає результат перетворення. Крім того, функція TryParse повертає бульову змінну True або False, яка повідомляє, чи успішно виконано перетворення. Як видно з лістингу, якщо користувач ввів не число, а наприклад, якісь букви, в мітку Label1 червоним кольором виводиться текст «Потрібно вводити числа». Далі, оскільки введення неправильне, організовано вихід з програми Button1_Click за допомогою оператора Exit Sub. На рис.3 показаний приклад роботи програми в даному випадку:

 

 

 З прикладу видно, що функція TryParse не сприйняла введені символи «мама» як число і вивела про це повідомлення в текстову мітку. Те ж саме відбудеться, якщо в якості розділювача цілої та дробової частини ввести не кому, а крапку.

Якщо ж користувач все таки ввів число, то і тут може бути виключення, адже корінь з від’ємного числа не добувається. Звичайно можна залишити цю ситуацію на розсуд самого Visual Basic, в цьому випадку мітка Label отримає значення:

 Щоб зробити дану ситуацію більш зрозумілою, використаємо просту перевірку умови:

 If X < 0 Then

      Label1.Text = String.Format("Кореня з {0} не існує!", X)

      Label1.ForeColor = Color.Red

      Return

End If

 Якщо ж користувач ввів все-таки число і воно більше нуля, то буде виконуватись наступний оператор знаходження квадратного кореня Math.Sqrt(X). Математичні функції Visual Studio 2010 є методами класу Math. Всі їх можна переглянути набрав Math та ввівши так званний оператор дозволу області дій (.). У випадаючому списку ви побачите багато математичних функції: Abs, Sin, Cos, Min і т. д., а також дві властивості – дві константи: E = 2,71... (основа натурального логарифму) та PI = 3,14... (число діаметрів, які вкладаються в довжину кола). Функція Math.Sqrt(X) повертає значення типу double (подвійної точності з плаваючою комою), яке перетворюємо за допомогою методу перетворення CType або Convert.ToSingle до змінної одинарної точності.

Останньою стрічкою обробки події Button1_Click є формування стрічки Label1.Text з використанням методу String.Format. Використаний формат  "Корінь з {0}  рівний {1:F5}" означає — взяти нулевий елемент виведення, тобто змінну Х. та записати її замість фігурних дужок, після чого взяти перший елемент виведення, тобто змінну Y, записати її замість других фігурних дужок в форматі з фіксованою комою та п’ятьма десятковими знаками після коми.

Результат роботи програми представлений на рис. 5:

Якщо в програмі виявлено помилки, її потрібно перевірити відладчиком – клавішами <F10> або <F11>. В цьому випадку інтерпретатор зупиняється на кожному операторі, і ви зможете перевірити значення кожної змінної, наводячи вказівник миші на змінні. Можна виконати програму до визначеної програмістом точки (точки зупинки) використовуючи, наприклад, клавішу  <F9> або оператор Stop, і в цій точці перевірити значення потрібних змінних.