При составлении приложений важно предусмотреть, чтобы программа анализировала возможные ошибки, возникающие при ее выполнении по вине пользователя, и информировала его об этом, подсказывая, что конкретно он сделал неправильно. При этом возможно два подхода:
По нажатию кнопки Счет, программа делит число, введенное в поле Числитель, на число, введенное в поле знаменатель, и выводит полученный результат в поле ответ.
Следующая программа производит деление числителя на знаменатель по нажатию кнопки Счет без контроля появления возможных ошибок:
Private Sub CommandButtonl_Click()
Dim Числитель, Знаменатель, Результат As Double
Числитель = CDbl(TextBoxl.Text)
Знаменатель = CDbl(TextBox2.Text)
Результат = Числитель / Делитель
TextBoxS.Text = CStr(Результат)
End Sub
Рис. 12.1. Диалоговое окно Деление
Несмотря на то что рассматриваемая ситуация очень простая, она уже таит в себе множество подводных камней. Например, если пользователь по невнимательности забудет ввести в поле числитель или в поле Знаменатель число при нажатии кнопки счет происходит аварийное прерывание программы с малопонятным сообщением о несоответствии типов отображаемом в диалоговом окне Microsoft Visual Basic (рис. 12.2)
Рис. 12.2. Диалоговое окно Microsoft Visual Basic с сообщением об ошибке
Данное сообщение об ошибке связано с одной из следующих двух инструкций в программе:
Числитель = CDbl(TextBoxl.Text)
Знаменатель = CDbl(TextBox2.Text)
где аргументом функции соы должна быть строка, преобразуемая в число. Если в какое-то из полей, числитель или Знаменатель, ничего не введено, по умолчанию из этого поля будет считываться пустая строка. Но пустая строка не может быть преобразована в число, и поэтому из-за функции CDbl происходит ошибка. Ошибка о несоответствии типов возникнет также, если в одно из полей пользователь по неосторожности введет число с десятичной запятой, а установками системы предусматривается десятичная точка и наоборот.
Такие ошибки ввода легко избежать, если производить в программе предварительную проверку: преобразуются ли вводимые данные в числа? Эту предварительную проверку можно, например, сделать, как показано в следующей процедуре, в которой предусмотрены: