Окно с сообщение об ошибке.

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Stalker1986
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 19.01.2009 (Пн) 7:23

Окно с сообщение об ошибке.

Сообщение Stalker1986 » 21.01.2009 (Ср) 7:47

Подскажите чайнику, как можно реализовать окно с сообщениями об ошибке при действии, которое недопустимо?
И как организовать систему описания ошибок?

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Re: Окно с сообщение об ошибке.

Сообщение Viper » 21.01.2009 (Ср) 8:12

MsgBox!
Весь мир матрица, а мы в нем потоки байтов!

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Окно с сообщение об ошибке.

Сообщение Денис » 21.01.2009 (Ср) 9:42

Рискну предположить, что Viper неправильно истолковал терминологию новичка. Скорее всего, он знает про MsgBox, но не знает конструкцию:
Код: Выделить всё
sub example()
on error goto L1                          'Обработчик ошибок (включаем и перенаправляем ошибки в метку L1)
   
   B = 0
   A = 10/B 'Делим на ноль

on error goto 0                           'Отключаем обработчик ошибок
exit sub

L1: 'Код обработчика ошибок идет отсюда
   msgbox err.description                 'Очень интересен объект err изучи его по F2
   
   B=2
   resume                                 'Пример возврата в процедуру.
end sub
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

VBTerminator
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 415
Зарегистрирован: 19.11.2008 (Ср) 20:10

Re: Окно с сообщение об ошибке.

Сообщение VBTerminator » 22.01.2009 (Чт) 19:47

Денис писал(а):
Код: Выделить всё
...on error goto 0                           'Отключаем обработчик ошибок...

А это зачем?

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Окно с сообщение об ошибке.

Сообщение iGrok » 22.01.2009 (Чт) 21:39

VBTerminator писал(а):А это зачем?

А это после "On error resume next" обратно включается стандартный обработчик.
Игнорировать ВСЕ ошибки, которые могут встретиться в коде, мягко говоря, вредно.

Впрочем, в его необходимости непосредственно перед Exit Sub я как-то сомневаюсь..
label:
cli
jmp label

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Окно с сообщение об ошибке.

Сообщение alibek » 23.01.2009 (Пт) 11:35

VBTerminator писал(а):А это зачем?

Для стиля.
Lasciate ogni speranza, voi ch'entrate.

VBTerminator
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 415
Зарегистрирован: 19.11.2008 (Ср) 20:10

Re: Окно с сообщение об ошибке.

Сообщение VBTerminator » 24.01.2009 (Сб) 19:40

iGrok писал(а):Игнорировать ВСЕ ошибки, которые могут встретиться в коде, мягко говоря, вредно.

Согласен, но формируемое программистом окно MsgBox с описанием необработанной ошибки как-то привлекательнее и понятнее юзеру, чем стандартное окно об ошибке VB.
alibek писал(а):Для стиля.

В смысле?

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Внезапно

Сообщение Денис » 09.02.2009 (Пн) 16:24

Ни для какого не "для стиля"! А для порядка. Код должен быть оформлен красиво и в нем должна невооруженным взглядом различаться логика языка. Бейсик позволяет отбрасывать многие элементы логики строго типизированных языков (это результат тяжелой наследственности) но это не значит, что надо пользоваться этими сомнительными преимуществами, иначе через полгода-год сам собственный код не поймешь.
Поэтому я, всегда, если делаю on error goto {Label} тотчас же делаю on error goto 0 даже если на первый взгляд смысла в этом нет, потому что следом идет exit sub. Например так же я всегда пишу полные блоки If ... End If и т.п. не забываю про отступы и стараюсь при нахождении повторов кода сразу же выносить их в отдельные функции.
Такой дисциплинированный подход к написанию кода позволяет до определенной степени даже комментариями не пользоваться, потому что код — самодокументируем.

Извиняюсь за поздний ответ.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

VBTerminator
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 415
Зарегистрирован: 19.11.2008 (Ср) 20:10

Re: Внезапно

Сообщение VBTerminator » 11.02.2009 (Ср) 20:03

Денис писал(а):...тотчас же делаю on error goto 0

Строка всё равно лишняя, метка обработчика ошибок бросается в глаза сразу именно из-за нулевого отступа. Зато засоряет прогу ненужными действиями.

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Внезапно

Сообщение iGrok » 11.02.2009 (Ср) 20:48

VBTerminator писал(а):
Денис писал(а):...тотчас же делаю on error goto 0

Строка всё равно лишняя, метка обработчика ошибок бросается в глаза сразу именно из-за нулевого отступа. Зато засоряет прогу ненужными действиями.

Не лишняя. За счёт нулевого отступа сразу виден блок, в котором отключена или перехвачена обработка ошибок.
Насчёт ненужности действия согласен. Но компилятор это всё равно приведёт в порядок, а так это действительно вопрос стиля.
Как и закрытие хендлов, подключений, уничтожение объектов перед "End".
label:
cli
jmp label

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Re: Окно с сообщение об ошибке.

Сообщение SLIM » 12.02.2009 (Чт) 12:28

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

Ну а по поводу обработчиков событий и т.д. (ну например Form Load), тут конечно только рулит Goto. Но вот у меня почему-то получается в этих обработчиках настолько мало кода (я имею в виду кода принадлежащего только обработчику)...все организованно в процедуры и функции, поэтому я всегда практически обрабатываю ошибки по кодам, которые сам придумал.....к тому же есть возможность не придумывать на каждую ошибку константу. Можно и плотнее упаковать :lol:
Пишите жизнь на чистовик.....переписать не удастся.....

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Окно с сообщение об ошибке.

Сообщение Денис » 12.02.2009 (Чт) 16:55

SLIM писал(а):обрабатываю ошибки по кодам, которые сам придумал...


Погоди-погоди! Я ж надеюсь, ты знаешь про объект Err?
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Re: Окно с сообщение об ошибке.

Сообщение SLIM » 13.02.2009 (Пт) 23:50

Денис писал(а):Погоди-погоди! Я ж надеюсь, ты знаешь про объект Err?

Знаю. Но я вот не об этом.
Есть ошибки, которые объект Err даст не с тем понятием которое я хотел. Как бы я локализую ошибку именно в своей программе. А не стандартно обрабатываю с помощью объекта.
Надеюсь смог передать мысль :cheese:
Пишите жизнь на чистовик.....переписать не удастся.....


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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 46

    TopList