Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Exit Sub




On Error GoTo m1

Обработка ошибок. Оператор On Error

Многие функции и операторы, которыми вы пользуетесь в Visual Basic, вовсе не обязаны при любых обстоятельствах успешно завершать свою работу. Например, вы запустили процедуру для чтения файла с дискеты:

Private Sub Command1_Click()

Open "a:\Файлик.txt" For Input As #1

Input #1, a

Close #1

Debug.Print a

End Sub

но забыли вставить дискету в дисковод. Оператор Open не может выполнить свою работу, Visual Basic выдает сообщение об ошибке и работа приложения прерывается. Рядовой пользователь, работающий с вашим приложением, окажется в затруднительном положении. Он совсем не обязан разбираться в английском тексте сообщения, и если он даже догадается, в чем дело, и вставит дискету, все равно приложение надо будет запускать заново, так как оно прервано. Вы, как программист, должны учитывать, что с вашим приложением будут работать рядовые пользователи, причем даже не очень квалифицированные. Поэтому при программировании вы должны предугадать все возможные неправильные действия пользователя, чтобы при таких действиях приложение не прерывалось, а выдавало вразумительное сообщение на русском языке и советы по выходу из затруднительной ситуации.

Кое-что в этом направлении мы уже делали в 5.9, предохраняя калькулятор от арифметических действий над текстом и от деления на ноль.

Самым примитивным способом защиты вышеприведенной программы будет такой:

Private Sub Command1_Click()

 

Open "a:\Файлик.txt" For Input As #1

Input #1, a

Close #1

Debug.Print a

 

m1: MsgBox ("Ошибка при вводе файла. Возможно, в дисководе нет дискеты.")

End Sub

Пояснения: Полужирным шрифтом я выделил новые элементы по сравнению с предыдущей программой. Оператор On Error GoTo m1 переводится так: "При возникновении ошибки иди к метке m1". Оператор On Error с момента своего выполнения заставляет компьютер быть начеку, не появится ли ошибка при выполнении программы. При ее появлении сообщение Visual Basic об ошибке уже не возникает, программа не прерывается, а управление передается на метку. Поэтому мы должны ставить оператор On Error раньше, чем операторы, могущие дать ошибку (в нашем случае это Open и Input). После метки вы должны поставить операторы, объясняющие пользователю, в чем дело, и помогающие как-то исправить ситуацию. В нашем случае никаких операторов, кроме MsgBox, не нужно. Забывчивый пользователь вставляет дискету в дисковод и снова жмет кнопку Command1. Все в порядке.

Обратите внимание на оператор Exit Sub. Если бы его не было, оператор MsgBox выполнялся бы всегда, даже при нормальной работе процедуры.

 

Написанный нами код слишком примитивен. Во-первых, мы не можем понять, какой оператор дал ошибку - Open или Input. Во-вторых, причин ошибки может быть несколько: отсутствие дискеты в дисководе, отсутствие файла на дискете и т.п. В первом случае мы вдобавок к оператору On ErrorGoTo m1 вставляем после Open, но перед Input, операторOn Error GoTo m2. В результате ошибка в строке Input будет обрабатываться операторами, начинающимися с метки m2., а ошибка в строке Open будет продолжать обрабатываться операторами, начинающимися с метки m1.

Во втором случае к нашим услугам объект Err, свойство которого Number принимает разные значения в зависимости от характера ошибки. Мы можем, например, писать такие строки:

If Err.Number = 71 Then

MsgBox ("В дисководе нет дискеты.")

ElseIf …………

Номера и имена констант ошибок вы найдете так: Help®Contents® MSDN Library (если она у вас установлена) ®Visual Studio documentation ®Visual Basic documentation®Reference®Trappable Errors.

 

Глава 17. Функции. Параметры процедур и функций

Процедуры и функции с параметрами - важное средство сделать вашу программу надежнее и понятнее.




Поделиться с друзьями:


Дата добавления: 2014-12-23; Просмотров: 451; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.011 сек.