ПОНЯТНО О Visual Basic NET (том 2)

Проверка ввода чисел в текстовое поле


Давайте запустим наш калькулятор в том виде, который он получил в 5.4.8:

Dim Чис1 As Double                 'Переменная, содержащая число из текстового поля Число1

Dim Чис2 As Double                 'Переменная, содержащая число из текстового поля Число2

Dim Рез As Double                   'Переменная-результат, предназначенный для текстового поля Результат

Private Sub Кл_сложения_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _

Handles Кл_сложения.Click

        Чис1 = Число1.Text             'Значения исходных данных переходят из текстовых полей в переменные

        Чис2 = Число2.Text

        Рез = Чис1 + Чис2               'Обработка переменных для получения результата

        Результат.Text = Рез          'Значение результата переходит из переменной в текстовое поле

End Sub

Попробуем ввести в верхнее текстовое поле вместо числа какую-нибудь ерунду, например, Куку. Щелкнем по кнопке сложения. VB выдает сообщение об ошибке из-за несовпадения  типов числовой переменной Чис1 и вводимой текстовой информации. Все верно.

Теперь подумаем – хорошо ли это, что VB реагирует на ваши неправильные действия собственными сообщениями об ошибке? Для вас, которые уже что-то умеют в программировании и делают калькулятор исключительно для собственной пользы и удовольствия, это может быть и хорошо. Ну а представьте, что вы решили похвастаться своим калькулятором перед подружкой, которая знакома с программированием только понаслышке, и она, работая с калькулятором, допустила такую же ошибку – ввела буквы вместо цифр! Что она подумает, увидев неожиданно возникшее окно с непонятными английскими словами? Вы думаете, она поймет, что это сообщение об ошибке? Скорее всего она подумает, что это сломался компьютер. И на какие кнопки, скажите на милость, ей теперь нажимать? "Ну и гадость твой калькулятор!" – скажет она и будет права.



Та же проблема стоит и перед всеми профессиональными программистами, которые создают свои продукты для пользователей, не обязанных ничего знать о программировании. Программист обязан сделать так, чтобы на все неправильные действия пользователя реагировал не VB своими непонятными сообщениями, а сама программа, причем понятно, по-русски, и тут же давала возможность исправиться.


Для этого в VB должны быть средства. И они там есть. Что нам нужно сейчас? Нам нужно средство, которое определяло бы, число ли записано в текстовом поле или же все, что угодно, но только не число. Этим занимается функция IsNumeric. Ее аргумент может иметь любой тип, в том числе и строковый. Функция анализирует строку и если видит, что она состоит из цифр, знака минус и запятой (точки) таким образом, что получается правильное число (и больше ничего в строке нет), то функция получает значение True, что означает "Истина", в противном случае - False, что означает "Ложь".  Проверим:

Оператор   Debug.WriteLine( IsNumeric("КУ-КУ"))  печатает False.

Оператор   Debug.WriteLine( IsNumeric("-67,3"))   печатает True.

Раз так, то функцию IsNumeric можно включать в логические выражения и использовать в качестве условия оператора If. Например,

If   IsNumeric("-67,3")   Then   MsgBox ("Это число")    Else  MsgBox ("Это не число")

что означает: "Если  -67,3 – число, то …"    Получается, что совсем не обязательно писать  

If   IsNumeric("-67,3")  = True   Then ….

Алгоритм работы калькулятора с проверкой звучит примерно так: Если в текстовом поле Число1 введено число и в текстовом поле Число2 введено число,  то делай все, что положено, иначе выдавай сообщение «Вводите только числа». Процедура сложения с учетом этого алгоритма будет выглядеть так:

Private Sub Кл_сложения_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Кл_сложения.Click

        If IsNumeric(Число1.Text) And IsNumeric(Число2.Text) Then

            Чис1 = Число1.Text

            Чис2 = Число2.Text

            Результат.Text = Чис1 + Чис2

        Else

            MsgBox("Вводите только числа")

        End If

End Sub

Здесь я немного сэкономил на переменной Рез. Поскольку мы ее никак не обрабатываем, я обошелся без нее. Процедуры для остальных арифметических действий пишутся аналогично.

Кстати, функция IsNumeric – это метод. А где его хозяин?


Содержание раздела