Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/18: Рейтинг темы: голосов - 18, средняя оценка - 4.78
 Аватар для jkrnd
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648

Как найти идентификатор ошибки в блоке Try Catch?

08.09.2016, 20:50. Показов 3739. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Текстовое описание ошибки легко получить:
VB.NET
1
 MsgBox(ex.Message)
а как узнать номер ошибки? Ведь в блоке Try Catch мы попадаем в секцию Catch при разных ошибках и в зависимости от ошибки производим те или иные действия.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.09.2016, 20:50
Ответы с готовыми решениями:

Как вывести сообщение об ошибке в блоке Try Catch
Привет. Сохраняю файл Visio: dim name as string="C: тут весь путь" if name<>"" then try ...

Программа некорректно обрабатывает ошибки обращения к базе данных в блоке Try-Catch
Всем доброго времени суток. Столкнулся со следующей проблеммой. Есть код: Dim cmd As New...

Как не делать остановку в блоке try/catch при дебаге?
Всем привет. Делаю дебаг кода. Но есть функция с блоком try/catch на котором постоянно происходит остановка. Так вот : как мне не...

15
 Аватар для Hemicide
121 / 114 / 62
Регистрация: 27.07.2014
Сообщений: 225
08.09.2016, 21:07
jkrnd, Marshal.GetLastWin32Error
1
 Аватар для jkrnd
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
08.09.2016, 21:33  [ТС]
Hemicide, то есть, долой Try Catch? Даёшь API!?
1
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18292 / 14216 / 5368
Регистрация: 17.03.2014
Сообщений: 28,894
Записей в блоге: 1
08.09.2016, 22:09
jkrnd, в общем случае у .NET исключений нет никаких номеров ошибок потому что чаще всего они не нужны. Имя исключения уже само по себе идентифицирует вид ошибки, текст исключения дополняет его.
1
 Аватар для jkrnd
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
08.09.2016, 22:17  [ТС]
OwenGlendower, используя текстовое имя ошибки ветвить программу? это довольно странно и по-моему не удобно.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18292 / 14216 / 5368
Регистрация: 17.03.2014
Сообщений: 28,894
Записей в блоге: 1
08.09.2016, 22:41
jkrnd, по тексту исключения точно ветвить не надо т.к. он зависит от локализации и может меняться при обновлении .NET.

Приведи конкретный сценарий в котором тебе нужно делать ветвление исходя из кода ошибки.
1
 Аватар для jkrnd
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
08.09.2016, 23:15  [ТС]
OwenGlendower,
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    Private Sub btnDelRecord_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDelRecord.Click
        'проверяем выделена ли хотя бы одна ячейка записи
        With DataGridView1
            Try
                If .CurrentRow.Cells(1).Selected Or .CurrentRow.Cells(2).Selected Or .CurrentRow.Cells(3).Selected Then
                    .CurrentRow.Selected = True  'отмечаем всю запись
                End If
            Catch ex As Exception
                MsgBox(ex.Message) 'ссылка на объект не указывает на экземпляр объекта    DirectCast(ex,System.NullReferenceException)._message
                'так объясняю эту ошибку я:
                MsgBox("Не выбрана ни одна ячейка таблицы.", MsgBoxStyle.Critical)
                Exit Sub
                'а вдруг ошибка другая? хотелось бы получить об этом соотв сообщение.
            End Try
            'дальше последует процедура удаления записи...................
        End With
    End Sub
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18292 / 14216 / 5368
Регистрация: 17.03.2014
Сообщений: 28,894
Записей в блоге: 1
08.09.2016, 23:28
Лучший ответ Сообщение было отмечено jkrnd как решение

Решение

jkrnd, нужно ловить не Exception, а NullReferenceException. Тогда не будет сомнений насчет типа ошибки. Еще лучше переписать код так чтобы этого исключения вообще не было - путем проверки CurrentRow на Nothing.
2
 Аватар для Sklifosofsky
1086 / 916 / 213
Регистрация: 29.09.2015
Сообщений: 1,019
08.09.2016, 23:34
Лучший ответ Сообщение было отмечено jkrnd как решение

Решение

В MSDN для конкретного метода (свойства) есть свой список исключений. Чтобы выдача информации об ошибках выдавало полноценно - придется почитать документацию...

Добавлено через 6 минут
OwenGlendower подметил, лучше не геморойничать и проверять содержание объекта
1
 Аватар для jkrnd
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
08.09.2016, 23:38  [ТС]
Цитата Сообщение от OwenGlendower Посмотреть сообщение
проверки CurrentRow на Nothing
поправьте пожалуйста, не работает:
VB.NET
1
2
3
        If DataGridView1.CurrentRow = Nothing Then
            'ошибка
        End If
0
69 / 69 / 10
Регистрация: 15.08.2012
Сообщений: 71
09.09.2016, 08:12
я не пойму, что ты хочешь в конечном итоге сделать. проверить наличие выделенных ячеек? строк? столбцов?
VB.NET
1
2
3
  DataGridView1.SelectedCells.Count
  DataGridView1.SelectedRows.Count
  DataGridView1.SelectedColumns.Count
узнать индексы выделенных строк?
VB.NET
1
2
3
    For Each tRow As DataGridViewRow In DataGridView1.SelectedRows
     'tRow.Index
    Next
индексы строк/столбцов выделенных ячеек?
VB.NET
1
2
3
4
    For Each tCell As DataGridViewCell In DataGridView1.SelectedCells
     'tCell.RowIndex
     'tCell.ColumnIndex
    Next
зачем делать заглушки?
1
Модератор
Эксперт .NET
 Аватар для Yury Komar
4358 / 3428 / 512
Регистрация: 27.01.2014
Сообщений: 6,258
09.09.2016, 10:17
Лучший ответ Сообщение было отмечено jkrnd как решение

Решение

Цитата Сообщение от jkrnd Посмотреть сообщение
как узнать номер ошибки?
а как же Err.Number?
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
    Try
            Dim a As Double = "CyberForum.Ru"
        Catch ex As Exception
            MsgBox(Err.Number & ": " & ex.Message)
        End Try
 
        Try
            Dim a = 0
            Dim b = 5 \ a
        Catch ex As Exception
            MsgBox(Err.Number & ": " & ex.Message)
        End Try
Миниатюры
Как найти идентификатор ошибки в блоке Try Catch?  
3
 Аватар для jkrnd
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
09.09.2016, 12:05  [ТС]
Цитата Сообщение от vxsw Посмотреть сообщение
DataGridView1.SelectedCells.Count
это то что мне было нужно. Но чисто для спортивного интереса:
VB.NET
1
2
3
        If DataGridView1.CurrentRow = Nothing Then
            'ошибка
        End If
Как исправить чтобы заработало?

Добавлено через 2 минуты
Цитата Сообщение от Yury Komar Посмотреть сообщение
а как же Err.Number?
как всё оказывается просто Спасибо!
0
69 / 69 / 10
Регистрация: 15.08.2012
Сообщений: 71
09.09.2016, 14:31
Цитата Сообщение от jkrnd Посмотреть сообщение
VB.NET
1
2
3
If DataGridView1.CurrentRow = Nothing Then
 'ошибка
 End If
Как исправить чтобы заработало?
у меня вообще такой код не проходит. раньше помню у меня почему-то постоянно были проблемы с "= Nothing", по этому перешел на "IsNothing()" - он не фейлился.
VB.NET
1
2
3
   If IsNothing(DataGridView1.CurrentRow) Then
 
   End If
про это речь?
2
 Аватар для jkrnd
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
09.09.2016, 15:32  [ТС]
Цитата Сообщение от vxsw Посмотреть сообщение
про это речь?
да, речь именно про это. Спасибо. Всё работает.
0
Модератор
Эксперт .NET
 Аватар для Yury Komar
4358 / 3428 / 512
Регистрация: 27.01.2014
Сообщений: 6,258
09.09.2016, 15:48
vxsw, проблемы с ЧТОТО = Nothing потому, что Nothing возвращает константу равную -1 вроде как... по этому вместо операьора РАВНО нужно использовать Is или IsNot
VB.NET
1
2
3
If DataGridView1.CurrentRow Is Nothing Then
 'ошибка
 End If
тоесть оператор Is сравнивает на уровне объектов, нежели = на уровне значений. Но могу ошибаться в определениях. Правктически - IsNothing является теми же Is, IsNot.
3
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.09.2016, 15:48
Помогаю со студенческими работами здесь

Объект в блоке try {} catch () {}
Такой вопрос. Есть конструктор, который выбрасывает ошибку, есть наследник, который тоже выбрасывает эту же ошибку. В классе Main...

Ошибка в с try - catch блоке
//--------------------------------------------------------------------------- #include <vcl.h> #include <Math.h> #include...

Получить имя функции в блоке catch
Внутри метода находится блок try-catch. Как получить при исключении имя метода ?

Не видны переменные, объявленные в блоке Try/Catch
try{ int i = 0; } i++; Ошибка Как исправить, заставить увидеть переменную?

Ошибка, связанная с памятью, в блоке Try catch
Ругается на память. try { if(pObject->empty())//проверяет или не пустой файл ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка SDL3 из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru