Форум программистов, компьютерный форум, киберфорум
Наши страницы
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
 
jkrnd
93 / 52 / 11
Регистрация: 22.12.2015
Сообщений: 1,463
#1

Как найти идентификатор ошибки в блоке Try Catch? - Visual Basic .NET

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

Текстовое описание ошибки легко получить:
vb.net
1
 MsgBox(ex.Message)
а как узнать номер ошибки? Ведь в блоке Try Catch мы попадаем в секцию Catch при разных ошибках и в зависимости от ошибки производим те или иные действия.
http://www.cyberforum.ru/vb-net/thread1775455.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.09.2016, 20:50
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Как найти идентификатор ошибки в блоке Try Catch? (Visual Basic .NET):

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

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

Ошибка в с try - catch блоке
//--------------------------------------------------------------------------- ...

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

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

15
Hemicide
118 / 111 / 62
Регистрация: 27.07.2014
Сообщений: 221
08.09.2016, 21:07 #2
jkrnd, Marshal.GetLastWin32Error
1
jkrnd
93 / 52 / 11
Регистрация: 22.12.2015
Сообщений: 1,463
08.09.2016, 21:33  [ТС] #3
Hemicide, то есть, долой Try Catch? Даёшь API!?
1
OwenGlendower
Супер-модератор
Эксперт .NET
8748 / 7752 / 3318
Регистрация: 17.03.2014
Сообщений: 15,252
Записей в блоге: 1
08.09.2016, 22:09 #4
jkrnd, в общем случае у .NET исключений нет никаких номеров ошибок потому что чаще всего они не нужны. Имя исключения уже само по себе идентифицирует вид ошибки, текст исключения дополняет его.
1
jkrnd
93 / 52 / 11
Регистрация: 22.12.2015
Сообщений: 1,463
08.09.2016, 22:17  [ТС] #5
OwenGlendower, используя текстовое имя ошибки ветвить программу? это довольно странно и по-моему не удобно.
0
OwenGlendower
Супер-модератор
Эксперт .NET
8748 / 7752 / 3318
Регистрация: 17.03.2014
Сообщений: 15,252
Записей в блоге: 1
08.09.2016, 22:41 #6
jkrnd, по тексту исключения точно ветвить не надо т.к. он зависит от локализации и может меняться при обновлении .NET.

Приведи конкретный сценарий в котором тебе нужно делать ветвление исходя из кода ошибки.
1
jkrnd
93 / 52 / 11
Регистрация: 22.12.2015
Сообщений: 1,463
08.09.2016, 23:15  [ТС] #7
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
OwenGlendower
Супер-модератор
Эксперт .NET
8748 / 7752 / 3318
Регистрация: 17.03.2014
Сообщений: 15,252
Записей в блоге: 1
08.09.2016, 23:28 #8
Лучший ответ Сообщение было отмечено jkrnd как решение

Решение

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

Решение

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

Добавлено через 6 минут
OwenGlendower подметил, лучше не геморойничать и проверять содержание объекта
1
jkrnd
93 / 52 / 11
Регистрация: 22.12.2015
Сообщений: 1,463
08.09.2016, 23:38  [ТС] #10
Цитата Сообщение от OwenGlendower Посмотреть сообщение
проверки CurrentRow на Nothing
поправьте пожалуйста, не работает:
vb.net
1
2
3
        If DataGridView1.CurrentRow = Nothing Then
            'ошибка
        End If
0
vxsw
69 / 69 / 10
Регистрация: 15.08.2012
Сообщений: 71
09.09.2016, 08:12 #11
я не пойму, что ты хочешь в конечном итоге сделать. проверить наличие выделенных ячеек? строк? столбцов?
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
Yury Komar
Модератор
Эксперт .NET
2364 / 2169 / 346
Регистрация: 27.01.2014
Сообщений: 3,898
Завершенные тесты: 1
09.09.2016, 10:17 #12
Лучший ответ Сообщение было отмечено 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
3
Миниатюры
Как найти идентификатор ошибки в блоке Try Catch?  
jkrnd
93 / 52 / 11
Регистрация: 22.12.2015
Сообщений: 1,463
09.09.2016, 12:05  [ТС] #13
Цитата Сообщение от vxsw Посмотреть сообщение
DataGridView1.SelectedCells.Count
это то что мне было нужно. Но чисто для спортивного интереса:
vb.net
1
2
3
        If DataGridView1.CurrentRow = Nothing Then
            'ошибка
        End If
Как исправить чтобы заработало?

Добавлено через 2 минуты
Цитата Сообщение от Yury Komar Посмотреть сообщение
а как же Err.Number?
как всё оказывается просто Спасибо!
0
vxsw
69 / 69 / 10
Регистрация: 15.08.2012
Сообщений: 71
09.09.2016, 14:31 #14
Цитата Сообщение от 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
93 / 52 / 11
Регистрация: 22.12.2015
Сообщений: 1,463
09.09.2016, 15:32  [ТС] #15
Цитата Сообщение от vxsw Посмотреть сообщение
про это речь?
да, речь именно про это. Спасибо. Всё работает.
0
Yury Komar
Модератор
Эксперт .NET
2364 / 2169 / 346
Регистрация: 27.01.2014
Сообщений: 3,898
Завершенные тесты: 1
09.09.2016, 15:48 #16
vxsw, проблемы с ЧТОТО = Nothing потому, что Nothing возвращает константу равную -1 вроде как... по этому вместо операьора РАВНО нужно использовать Is или IsNot
vb.net
1
2
3
If DataGridView1.CurrentRow Is Nothing Then
 'ошибка
 End If
тоесть оператор Is сравнивает на уровне объектов, нежели = на уровне значений. Но могу ошибаться в определениях. Правктически - IsNothing является теми же Is, IsNot.
3
09.09.2016, 15:48
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.09.2016, 15:48
Привет! Вот еще темы с решениями:

Ошибка, связанная с памятью, в блоке Try catch
Ругается на память. try { ...

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

Проблема с возвращающим значением метода в блоке try-catch
Поставил блок try -catch, начало ругаться на значение return myArray;, которое...

Что прописать в блоке catch в данном случае ?
Привет всем. Есть класс , в котором имеется метод. В методе описываются...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru