Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> "on error" глючит или я не понял? 
:(
    Опции темы
Сувор
Дата 17.7.2004, 19:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 7.6.2004

Репутация: нет
Всего: нет



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 как и ожидаем,
а после второго получаем таки сообщение об ошибке! ------- Не понял!?


PM MAIL   Вверх
cardinal
Дата 17.7.2004, 22:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 19
Всего: 99



Кто же так пишет? Это же невозможно читать. baaa.gif
Код
Sub form_load()
CommonDialog1.CancelError = True
On Error GoTo 100
CommonDialog1.ShowOpen
100:
On Error GoTo 200
CommonDialog1.ShowOpen
200:
End Sub

А вот почему не работает я пока сам не понял.


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
boevik
Дата 18.7.2004, 07:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1452
Регистрация: 31.5.2004
Где: Израиль

Репутация: 12
Всего: 35



CommonDialog1.CancelError = True 'при нажатии на Cancel выбросит ошибку

Нажал Cancel (т.е. выброс ошибки), происходит переход на метку 100.

Когда во второй раз нажимается Cancel, возникает вторая ошибка в той же процедуре.
При возникновении второй ошибки в той же процедуре, обработка ошибки передается на верхний уровень.
Так как выше уровня нет, то VB выбрасывает ошибку.

Это объяснение.
Сувор, мне не понятно, что ты хотел сделать в этом коде. Объясни подробнее.



--------------------
Никогда не говори никогда
PM MAIL WWW   Вверх
Naghual
Дата 18.7.2004, 21:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1893
Регистрация: 15.5.2004
Где: Украина, Днепр

Репутация: 26
Всего: 49



Фишка в том, что у тебя нет обработки ошибки как таковой. Тоесть количество ошибок в коллекции Err больше 1 (Err.Count > 1).
Плюс, как уже сказал боевик, повторное событие возникает в той-же процедуре.
Необходимо правильно назначать точки входа и выхода для событий Ошибок!

Код

Sub form_load()
  CommonDialog1.CancelError = True
  On Error GoTo 100
  CommonDialog1.ShowOpen
100:
  On Error GoTo 200
  CommonDialog1.ShowOpen
  'Вот тут добавляеш:
  Err.Resume Next  'Или Err.Resume 200:
200:
  'Вот тут добавляеш:
  Err.Resume Next
End Sub



--------------------
Я желаю всем Счастья!
PM ICQ Skype   Вверх
Сувор
Дата 26.7.2004, 22:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 7.6.2004

Репутация: нет
Всего: нет



Что хотел? -Ну это конечно выжимка из моего кода. А хотел я открыть несколько файлов, но некоторых может не быть, но это не смертельно. Ну грузить этим всем юзера по-моему негуманно, я просто предлагаю ему открывать и рассчитываю что при наличии отсутствия он может кликнуть отмену а я распознаю да и пропущу. И тут вдруг такие заморочки! Но попробую как сказали! Thank you very very much!
PM MAIL   Вверх
cardinal
Дата 27.7.2004, 08:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 19
Всего: 99



Блин, хотел тут пару строчек чиркануть и забыл...

Naghual
Код
Sub form_load()
 CommonDialog1.CancelError = True
 On Error GoTo 100
 CommonDialog1.ShowOpen
100:
 On Error GoTo 200
 CommonDialog1.ShowOpen
 'Вот тут добавляеш:
 Err.Resume Next  'Или Err.Resume 200:
200:
 'Вот тут добавляеш:
 Err.Resume Next
End Sub

Err.Resume Next, в последней строке как я понял можно и не писать, т.к. при выходе из процедуры Err должен сам обнулиться.
А вообще у меня нет Err.Resume, a есть только Rеsume... smile.gif
Цитата
И тут вдруг такие заморочки!

Да в принципе никаких особых проблем здесь я не вижу. Главное после обработки ошибки написать Resume (что не советуют), Resume Next или Resume "label".



--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
Naghual
Дата 28.7.2004, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1893
Регистрация: 15.5.2004
Где: Украина, Днепр

Репутация: 26
Всего: 49



cardinal
Цитата
Err.Resume Next, в последней строке как я понял можно и не писать, т.к. при выходе из процедуры Err должен сам обнулиться.


Это не совсем верно.
Если форма запускается програмой автоматически (StartUp object: Form), то тогда да.
Но если форма, которая содержит эту процедуру была вызвана програмно, да еще и в родительской процедуре установлен перехватчик ошибок, то это событие об ошибке к ней и перенесется! Тоесть, сработает перехват ошибки на строке Form.Show или подобной.

Поправье если я не прав




--------------------
Я желаю всем Счастья!
PM ICQ Skype   Вверх
boevik
Дата 28.7.2004, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1452
Регистрация: 31.5.2004
Где: Израиль

Репутация: 12
Всего: 35



Naghual, прав на 100%.



--------------------
Никогда не говори никогда
PM MAIL WWW   Вверх
cardinal
Дата 28.7.2004, 21:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 19
Всего: 99



Понял smile.gif, надо будет это в FAQ дописать...


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
Сувор
Дата 29.7.2004, 21:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 7.6.2004

Репутация: нет
Всего: нет



Нет счастья! Err.Resume Next мой VB 6.0 вообще не сьел -просит вместо Next
выражение, а когда я поставил просто Resume Next, то с обработкой Отмены все
вроде прошло, но вот когда я шлепнул "Открыть" (при наличии отсутствия нужного файла) то бедняга впал в такой ступор, что в натуре пришлось питание вырубать! (и если поставить CommonDialog.Flags на &H1000 то все равно также)
Ну да бог с ним -загружу этим юзера пусть сам открывает
PM MAIL   Вверх
Naghual
Дата 29.7.2004, 22:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1893
Регистрация: 15.5.2004
Где: Украина, Днепр

Репутация: 26
Всего: 49



wink.gif
Ок. Это он у тебя на последний ругается. Ну и правильно. Мы говорим ему - сбросить ошибку и перейти к следующей строке. Только вот строки следующей НЕТ. Есть конец процедуры.
Нужно добавить строку. К примеру такую:
Код
   Err.Resume Next
   DoEvents
End Sub


P.S.
А может стоит пересмотреть придуманый тобою алгоритм открытия файлов?


--------------------
Я желаю всем Счастья!
PM ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по VB обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB6 | Следующая тема »


 




[ Время генерации скрипта: 0.1450 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.