Jayanta Modak Ответов: 2

Показать ссылку на объект ошибки, не заданную для экземпляра объекта.


Object reference not set to an instance of an object.


Capture — imgbb.com
[^]

Что я уже пробовал:

Private Sub btnaddcat_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnaddcat.Click
        Dim myCheckFont As New System.Drawing.Font("Wingdings", 12, FontStyle.Regular)
        Dim myRegFont As New System.Drawing.Font("Arial", 12, FontStyle.Regular)

        With objPurID_PR
            ListView2.Items.Clear()
            .purinvid = id
            dt = .GetPurInvItemForPR()
            For i As Integer = 0 To dt.Rows.Count - 1
                Dim dr As DataRow = dt.Rows(i)

                Dim listitem As New ListViewItem(dr("itemnm").ToString())
                listitem.UseItemStyleForSubItems = False
                listitem.SubItems.Add(Chr(168))
                listitem.SubItems.Item(1).Font = myCheckFont


                listitem.SubItems.Add(dr("PDQty").ToString())

                listitem.SubItems.Add(dr("itemnm").ToString())

                listitem.SubItems.Add(dr("itemnm").ToString())

                ListView2.Items.Add(listitem)
            Next
        End With
    End Sub


Private Structure MyCell
        Dim Row As Integer
        Dim Col As Integer
    End Structure


Private bOWCheck() As Boolean


Private Sub ListView2_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles ListView2.MouseUp
        Dim cellLoc As MyCell
        cellLoc = WhichCell(ListView2, e.X, e.Y)
        Label4.Text = cellLoc.Row.ToString & "  " & cellLoc.Col.ToString
        If cellLoc.Col = 2 Then
            If bOWCheck(cellLoc.Row) = True Then

                Label5.BackColor = Color.AliceBlue
                ListView2.Items(cellLoc.Row).SubItems(cellLoc.Col - 1).Text = Chr(168)
                bOWCheck(cellLoc.Row) = False
            Else
                Label5.BackColor = Color.Coral
                ListView2.Items(cellLoc.Row).SubItems(cellLoc.Col - 1).Text = Chr(258)
                bOWCheck(cellLoc.Row) = True
            End If

        End If
    End Sub


Private Function WhichCell(ByVal lvw As ListView, ByVal X As Integer, ByVal Y As Integer) As MyCell

        Dim colstart As Integer = 0
        Dim colend As Integer = 0
        Dim xCol As Integer

        For xCol = 0 To (ListView2.Columns.Count - 1)
            colend = colend + ListView2.Columns(xCol).Width
            If colstart <= X And X <= colend Then
                WhichCell.Col = xCol + 1
                Exit For
            End If
            colstart = colstart + ListView2.Columns(xCol).Width
        Next

        WhichCell.Row = ListView2.FocusedItem.Index
        Return WhichCell

    End Function

Patrice T

Если вы посмотрите внимательно, вы увидите, что сообщение об ошибке также скажет вам, где находится ошибка, ее положение.

Jayanta Modak

Сэр, я вижу ошибку массажа, но я не понимаю, в чем заключается ошибка. Пожалуйста, помогите мне решить эту проблему. Спасибо

Dave Kreskowiak

В какой строке происходит исключение?

У вас есть и другая проблема. Каждый раз, когда вы нажимаете кнопку btnAdd, вы создаете два новых объекта шрифта. НЕ ДЕЛАЙ ЭТОГО! В вашем приложении происходит утечка ресурсов.

Создайте объекты шрифта на уровне класса, чтобы вы могли повторно использовать их в любом месте вашего кода. Когда ваше приложение завершит работу, вызовите Dispose для этих объектов, чтобы освободить ресурсы, которые они удерживают.

Jayanta Modak

https://ibb.co/cNRFzp в этой строке

я не использую ни одну кнопку своего проекта, когда я добавляю какую-либо часть кодирования, то я проверяю ее с помощью кнопки (btnadd), после чего она преобразуется в частную суб и звонит оттуда, где это необходимо.

Я пробую много типов кодирования listview1.checkbox=true, но это не работает должным образом , не работает изменение, щелчок, мышь вверх / вниз и т.д. Потому что , когда я нажимаю на галочку, галочка поет и выключается, но никогда не выбирает полную строку, для этого listview1 меняется, щелчок, мышь вверх / вниз не работает, поэтому я использую этот метод

пожалуйста, простите меня, Сэр, я не знаю хорошего английского языка, пожалуйста, простите. и пожалуйста помогите мне решить эту проблему
Спасибо

Dave Kreskowiak

Когда код ломается, наведите курсор мыши на .Row, затем collLoc, затем bOWCheck. Один из них будет равен нулю, или вообще ничего. VB.NET. Сначала вы выясняете, что такое null, а затем возвращаетесь назад по коду, чтобы выяснить, почему это null.

Нельзя вызывать методы и свойства для несуществующего объекта.

2 Ответов

Рейтинг:
2

Richard Deeming

Private bOWCheck() As Boolean

Вы объявили массив из Boolean значения, но нигде в коде, который вы показали, вы фактически не инициализировали его. Следовательно, стоимость его Nothing, и попытка чтения из него или записи в него приведет к NullReferenceException.

Массивы в Visual Basic | Microsoft Docs[^]

NB: Вы могли бы узнать это для себя гораздо быстрее, просто отладка вашего кода!


Рейтинг:
1

ZurdoDev

Объект является нулевым. Вот что говорит вам ошибка. Теперь вам нужно выяснить, почему, а затем исправить это или справиться с этим.