Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Синтаксис. Здесь label — метка (отмечаемая в коде двоеточием за ней), за которой начинается обработчик





On Error GoTo label

Здесь label — метка (отмечаемая в коде двоеточием за ней), за которой начинается обработчик.

Итак, первым оператором <$I[]блок кода обработки прерывания> блока кода обработки прерывания по ошибке является метка с двоеточием за ней. Далее без всяких ограничивающих блоки операторов следует писать код, который, кстати, необязательно должен обрабатывать ошибки: вы можете просто констатировать факт наличия ошибки. Во-первых, не всегда можно идентифицировать ошибку, а во-вторых, не всякую ошибку можно исправить. Вы можете, например, только предположить, что произошло, и попытаться дать рекоммендации пользователю, как избежать повторения какой-либо ошибки. Для кодов-примеров мы, конечно, будем точно знать типы ошибок, потому что сами будем их инициировать.

Перед меткой, задающей начало обработчика, дожен находиться оператор выхода из процедуры (функции). Иначе даже при отсутствии ошибки код обработчика будет выполняться, как только для этого наступит время. В листинге 12.2 приведен пример обработчика, который выполняется в том случае, если пользователь введет в текстовом окне не число, а что-либо отличное от числа.

Листинг 12.2. Пример обработчика ошибок

1: Private Sub Command1_Click()

2: Dim z, y As Integer

3: On Error GoTo err

4: y = InputBox("Введите число")

5: z = y + 10

6:

7: MsgBox z

8: MsgBox "Спасибо!"

9: Exit Sub

10:

11: err:

12: MsgBox ("Просили же Вас ввести число!")

13: End Sub

Как видно из этого примера, здесь никто не собирался идентифицировать ошибку: в таком простом коде можно было только предположить, что всему виной будет пользователь, который не может пользоваться окном ввода целого числа. Тем не менее, в Visual Basic есть возможность узнать тип ошибки (как ее «для себя» определяет Visual Basic) посредством <$I[]объект Err > объекта Err с несколькими свойствами, из которых для нас наиболее полезны Number — номер ошибки, и Description — описание ошибки. При этом в документации MSDN есть замечание с рекомендацией не очень доверять свойству Description, а использовать только свойство Number. Например, код листинга 12.2 можно дополнить анализом произошедшей ошибки (см. листинг 12.3).

Листинг 12.3. Анализ ошибки в обработчике

1: Private Sub Command1_Click()

2: Dim z, y As Integer

3: On Error GoTo err

4: y = InputBox("Введите число")

5: z = y + 10

6:

7: MsgBox z

8: MsgBox "Спасибо!"

9: Exit Sub

10:

11: err:

12: If err.Number = 13 Then

13: MsgBox ("Просили же Вас ввести число!")

14: End If

15: End Sub

Если вы предполагаете, что в течение работы с процедурой могут произойти самые разные ошибки, можно в коде обработчика использовать оператор Select Case для возможных действий, исправляющих ситуацию.

Как вы могли уже заметить, в листингах 12.2-12.3 сразу после выполнения кода обработчика вся процедура завершается. Такой обработчик хорош только в качестве примера того, как не нужно делать. Если мы по всяким пустякам будем завершать процедуры, то такое приложение не очень много принесет пользы.

Итак, нам нужен способ обработать ошибку или, в крайнем случае, сообщить о ней, но обязательно как-то продолжить выполнение процедуры.

Date: 2015-08-22; view: 286; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.008 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию