Страница: 1 |
Вопрос: Смена режима обработки ошибки | Добавлено: 22.08.08 20:36 |
Автор вопроса: ![]() |
Наверное, кто-то из здешних обитателей сталкивался с подобными вещами:
Имеется подпрограмма, в самом начале её кода задаётся режим обработки ошибок (не знаю даже, как это назвать по научному, но вот пример): Sub nextb_Click()
On Error GoTo FinaliseError <куча кода> Exit Sub FinaliseError: <куча кода> End sub А теперь мне вздумалось пропускать ошибки (а они по логике программы не обязаны, но в 90% случаев должны возникать) в этой самой подпрограмме в коде после метки! То есть: Sub nextb_Click()
On Error GoTo FinaliseError <куча кода> Exit Sub FinaliseError: On Error Resume Next <куча кода> End sub Но тут уже, встретив ошибку, компилятор ругается на неё по всей форме, не думая пропускать... Конечно, можно сделать вызов после этой метки ещё одной подпрограммы, куда и запихнуть строптивый код. Но нет ли способа попроще? Ах, да. VB6. |
Ответы | Всего ответов: 9 |
Номер ответа: 1 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Offline Client Вопросов: 236 Ответов: 8362 |
Профиль | Цитата | #1 | Добавлено: 23.08.08 21:14 |
on error goto 0 |
Номер ответа: 2 Автор ответа: ![]() ![]() Вопросов: 20 Ответов: 131 |
Web-сайт: Профиль | Цитата | #2 | Добавлено: 24.08.08 15:05 |
Спасибо, но нужен всё-таки пропуск ошибок, а не увод программы в неведомо куда (а, судя по всему, goto 0 это и делает - как-то уже не хочется ломать то, что заработало для проверки).
Уже вставил тот код в отдельный Sub. На том и порешил проблему. Но всё равно спасибо. |
Номер ответа: 3 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ICQ: 262809473 Вопросов: 17 Ответов: 561 |
Web-сайт: Профиль | Цитата | #3 | Добавлено: 24.08.08 16:29 |
<imho> если ошибка есть, то программист должен хотя бы знать о ней </imho> |
Номер ответа: 4 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() Администратор ICQ: 278109632 Вопросов: 42 Ответов: 3949 |
Web-сайт: Профиль | Цитата | #4 | Добавлено: 24.08.08 23:01 |
On Error GoTo / On Error Resume действует до выхода из процедуры, а не до следующего встретившегося On Error |
Номер ответа: 5 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Вопросов: 130 Ответов: 6602 |
Профиль | Цитата | #5 | Добавлено: 25.08.08 19:04 |
On Error GoTo 0 это не "увод вникуда", а отключение обработки ошибок - если произойдет ошибка то ее обработает отладчик (если запускаешь под отладчиком) или будет падение программы.
Вот вобщем, а вообще в VB 6.0 "обработка ошибок" присутствует чисто формально и как правило используется так: Sub Hel () On Error Resume Next ' тут код End Sub Поэтому и переходим на VB .NET 9.0 |
Номер ответа: 6 Автор ответа: ![]() ![]() Вопросов: 20 Ответов: 131 |
Web-сайт: Профиль | Цитата | #6 | Добавлено: 25.08.08 19:23 |
><imho> если ошибка есть, то программист должен хотя бы знать о ней </imho>
У меня просто это очень хитрая процедура работы с директориями. Если ошибка возникает - значит, директории нет! И идём на метку, там всё делаем... но и там могут быть затруднения... >On Error GoTo 0 это не "увод вникуда", а отключение обработки ошибок - если произойдет ошибка то ее обработает отладчик (если запускаешь под отладчиком) или будет падение программы. Это отключение обработки ошибок вообще? Спасибо... |
Номер ответа: 7 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Offline Client Вопросов: 236 Ответов: 8362 |
Профиль | Цитата | #7 | Добавлено: 26.08.08 03:15 |
ну типо..
код.. ... On Error Resume Next код... on error goto vnikuda код.. .. а потом бац.. и убрали все обработчики установленные ранее. on error goto 0 далее прога будет падать, если не задать новый обработчик. |
Номер ответа: 8 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Offline Client Вопросов: 236 Ответов: 8362 |
Профиль | Цитата | #8 | Добавлено: 26.08.08 03:17 |
On Error GoTo / On Error Resume действует до выхода из процедуры, а не до следующего встретившегося On Error Именно через on error goto 0 можно сделать "следующий On Error GoTo"...
|
Номер ответа: 9 Автор ответа: ![]() ![]() Вопросов: 20 Ответов: 131 |
Web-сайт: Профиль | Цитата | #9 | Добавлено: 26.08.08 14:39 |
Именно через on error goto 0 можно сделать "следующий On Error GoTo"...
Ага... Всё становится на свои места. Спасибо, теперь всё более-менее понятно. |
Страница: 1 |
|