Ошибка в классе

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Debugger
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1667
Зарегистрирован: 17.06.2006 (Сб) 15:11

Ошибка в классе

Сообщение Debugger » 09.03.2013 (Сб) 17:36

Код:
Код: Выделить всё
Private Sub Form_Load()
    On Error GoTo er
    test
    Exit Sub
er:
    MsgBox "Ошикба: " & Err.Description
End Sub

(в модуле)
Код: Выделить всё
Sub test()
    Err.Raise 15, , "test"
End Sub

Всё проходит отлично, выбрасывается ошибка, ловится, и выводится окошко.

Перемещаем код из модуля в класс, вызываем из формы метод класса:
Код: Выделить всё
Private Sub Form_Load()
    On Error GoTo er
    Dim c As New Class1
    c.test
    Exit Sub
er:
    MsgBox "Ошикба: " & Err.Description
End Sub

Я ожидал аналогичного поведения.
Но ошибка не "проваливается" в место, откуда её вызвали, и выполнение останавливается на Err.Raise.

Может, я что-то делаю не так или чего-то не понимаю?
Пока обхожу проблему с помощью Event'ов. Насколько это (не)правильно и есть ли альтернативы?

Filyus
Обычный пользователь
Обычный пользователь
 
Сообщения: 81
Зарегистрирован: 07.07.2011 (Чт) 11:54

Re: Ошибка в классе

Сообщение Filyus » 09.03.2013 (Сб) 18:10

Не знаю почему, но с Friend ошибка передаётся, с Public - нет.
Friend - это объявление функций в классах, доступных только в текущем проекте (что обычно и нужно).
Код: Выделить всё
Friend Sub test()
    Err.Raise 15, , "test"
End Sub

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Ошибка в классе

Сообщение ger_kar » 09.03.2013 (Сб) 20:28

Ну вообще по идее, такое поведение - это фича VB, для того чтобы отлаживать код в модулях класса.
BreakError.png
BreakError.png (9.3 Кб) Просмотров: 1067

Даже если имеется перехват ошибок VB можно заставить прерываться на любой.
Для этого - опция "Break On All Error"
По умолчанию стоит - "Break in Class Module"
Ну и наконец, что-бы прерываний вообще не было есть еще и третья опция.
Но при любом раскладе - все эти опции действуют исключительно в режиме отладки. И на скомпилированный код никак не влияют. Т.е. это опции исключительно встроенного отладчика.
Бороться и искать, найти и перепрятать

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Ошибка в классе

Сообщение Хакер » 09.03.2013 (Сб) 22:45

ger_kar писал(а):Ну и наконец, что-бы прерываний вообще не было есть еще и третья опция.

С чего ради? Третье характеризует ситуацию, когда выполнение прерывается тогда, когда не найден соответствующих обработчик.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Ошибка в классе

Сообщение Хакер » 09.03.2013 (Сб) 22:51

И я бы всё-таки ориентировался на этот скриншот. Эта настройка имеет более генеральное значение (не путать в более высоким приоритетом).
vb_error_trapping_settings.png
vb_error_trapping_settings.png (13.56 Кб) Просмотров: 1060
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Ошибка в классе

Сообщение ger_kar » 09.03.2013 (Сб) 22:58

Хакер писал(а):С чего ради? Третье характеризует ситуацию, когда выполнение прерывается тогда, когда не найден соответствующих обработчик.
Ну речь то как раз шла о перехвате и обработке ошибки, поэтому в контексте этой ситуации я и написал. Если обработчика нет, то прерывание по любому возникнет, и не только в отладочном режиме :) .
Бороться и искать, найти и перепрятать


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот, SemrushBot, Yandex-бот и гости: 23

    TopList