| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > VB6 > "on error" глючит или я не понял? |
| Автор: Сувор 17.7.2004, 19:55 |
| 1. Запускаю код для VB 6.0: Sub form_load(): CommonDialog1.CancelError = True: On Error GoTo 100: CommonDialog1.ShowOpen: 100 On Error GoTo 200: CommonDialog1.ShowOpen: 200 End Sub После первого клика на Cancel улетаем на 100 как и ожидаем, а после второго получаем таки сообщение об ошибке! ------- Не понял!? |
| Автор: cardinal 17.7.2004, 22:09 | ||
Кто же так пишет? Это же невозможно читать.
А вот почему не работает я пока сам не понял. |
| Автор: boevik 18.7.2004, 07:43 |
| CommonDialog1.CancelError = True 'при нажатии на Cancel выбросит ошибку Нажал Cancel (т.е. выброс ошибки), происходит переход на метку 100. Когда во второй раз нажимается Cancel, возникает вторая ошибка в той же процедуре. При возникновении второй ошибки в той же процедуре, обработка ошибки передается на верхний уровень. Так как выше уровня нет, то VB выбрасывает ошибку. Это объяснение. Сувор, мне не понятно, что ты хотел сделать в этом коде. Объясни подробнее. |
| Автор: Naghual 18.7.2004, 21:07 | ||
| Фишка в том, что у тебя нет обработки ошибки как таковой. Тоесть количество ошибок в коллекции Err больше 1 (Err.Count > 1). Плюс, как уже сказал боевик, повторное событие возникает в той-же процедуре. Необходимо правильно назначать точки входа и выхода для событий Ошибок!
|
| Автор: Сувор 26.7.2004, 22:01 |
| Что хотел? -Ну это конечно выжимка из моего кода. А хотел я открыть несколько файлов, но некоторых может не быть, но это не смертельно. Ну грузить этим всем юзера по-моему негуманно, я просто предлагаю ему открывать и рассчитываю что при наличии отсутствия он может кликнуть отмену а я распознаю да и пропущу. И тут вдруг такие заморочки! Но попробую как сказали! Thank you very very much! |
| Автор: cardinal 27.7.2004, 08:22 | ||||
| Блин, хотел тут пару строчек чиркануть и забыл... Naghual
Err.Resume Next, в последней строке как я понял можно и не писать, т.к. при выходе из процедуры Err должен сам обнулиться. А вообще у меня нет Err.Resume, a есть только Rеsume...
Да в принципе никаких особых проблем здесь я не вижу. Главное после обработки ошибки написать Resume (что не советуют), Resume Next или Resume "label". |
| Автор: Naghual 28.7.2004, 13:04 | ||
cardinal
Это не совсем верно. Если форма запускается програмой автоматически (StartUp object: Form), то тогда да. Но если форма, которая содержит эту процедуру была вызвана програмно, да еще и в родительской процедуре установлен перехватчик ошибок, то это событие об ошибке к ней и перенесется! Тоесть, сработает перехват ошибки на строке Form.Show или подобной. Поправье если я не прав |
| Автор: boevik 28.7.2004, 13:10 |
| Naghual, прав на 100%. |
| Автор: cardinal 28.7.2004, 21:23 |
| Понял |
| Автор: Сувор 29.7.2004, 21:25 |
| Нет счастья! Err.Resume Next мой VB 6.0 вообще не сьел -просит вместо Next выражение, а когда я поставил просто Resume Next, то с обработкой Отмены все вроде прошло, но вот когда я шлепнул "Открыть" (при наличии отсутствия нужного файла) то бедняга впал в такой ступор, что в натуре пришлось питание вырубать! (и если поставить CommonDialog.Flags на &H1000 то все равно также) Ну да бог с ним -загружу этим юзера пусть сам открывает |
| Автор: Naghual 29.7.2004, 22:09 | ||
| Ок. Это он у тебя на последний ругается. Ну и правильно. Мы говорим ему - сбросить ошибку и перейти к следующей строке. Только вот строки следующей НЕТ. Есть конец процедуры. Нужно добавить строку. К примеру такую:
P.S. А может стоит пересмотреть придуманый тобою алгоритм открытия файлов? |