Abung Salman Ответов: 1

Vb.net - индекс находился вне допустимого диапазона. Должно быть неотрицательным и меньшим, чем размер коллекции ListView с


Я пытаюсь изменить изображение listview во время выполнения с помощью этого кода, но получаю ошибку:

Индекс был вне зоны досягаемости. Должен быть неотрицательным и меньше размера коллекции

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

Try
        lvroom.BeginUpdate()
        For Each L As ListViewItem In lvroom.Items
            Dim mycommand As MySqlCommand = conn.open.CreateCommand
            Dim query1 = "SELECT room.*,roomtype.* FROM room, roomtype WHERE room.RoomType=roomtype.RoomType AND RoomNo='" & L.ImageKey & "'"
            mycommand.CommandText = query1
            Dim baca1 As MySqlDataReader = mycommand.ExecuteReader
            If baca1.Read() Then
                Dim NoKamar As String = baca1("RoomNo")
                Dim str As String
                If Len(NoKamar) = 1 Then
                    str = "00" & NoKamar
                ElseIf Len(NoKamar) = 2 Then
                    str = "0" & NoKamar
                Else
                    str = NoKamar
                End If
                If baca1("Available") = True And baca1("Status") = False Then

                    L.ImageList.Images.RemoveByKey(L.ImageKey)
                    Dim newbitmap As Bitmap = My.Resources.bulat_hijau
                    Dim g As Graphics
                    g = Graphics.FromImage(newbitmap)
                    g.DrawString(str, New Font("Arial", 65, FontStyle.Bold), New SolidBrush(Color.Yellow), New Point(85, 50))
                    g.DrawString("______________________", New Font("Arial", 65, FontStyle.Bold), New SolidBrush(Color.White), New Point(0, 80))
                    g.DrawString(baca1("Singkatan"), New Font("Arial", 65, FontStyle.Bold), New SolidBrush(Color.White), New Point(82, 170))
                    L.Text = "EMPTY"
                    L.Font = New Font("Arial", 12, FontStyle.Bold)
                    L.ImageList.Images.Add(NoKamar, newbitmap)

                ElseIf baca1("Available") = False And baca1("Status") = False Then

                    L.ImageList.Images.RemoveByKey(L.ImageKey)
                    Dim newbitmap As Bitmap = My.Resources.bulat_purple
                    Dim g As Graphics
                    g = Graphics.FromImage(newbitmap)
                    g.DrawString(str, New Font("Arial", 65, FontStyle.Bold), New SolidBrush(Color.Yellow), New Point(85, 50))
                    g.DrawString("______________________", New Font("Arial", 65, FontStyle.Bold), New SolidBrush(Color.White), New Point(0, 80))
                    g.DrawString(baca1("Singkatan"), New Font("Arial", 65, FontStyle.Bold), New SolidBrush(Color.White), New Point(82, 170))
                    L.Text = "N/A"
                    L.Font = New Font("Arial", 12, FontStyle.Bold)
                    L.ImageList.Images.Add(NoKamar, newbitmap)

                End If
            End If
                baca1.Close()
            lvroom.Refresh()
        Next
        lvroom.EndUpdate()
        Catch ex As Exception
        MsgBox(ex.Message)
        Finally
        conn.close()
        End Try

1 Ответов

Рейтинг:
2

Dave Kreskowiak

С чего начать...

Во-первых, вы сильно утекаете ресурсы кода. Эти объекты SqlCommand, Font, Bitmap и Graphics, которые вы создаете, абсолютно необходимо удалить, когда вы закончите их использовать. Вы запустите Windows без ресурсов, и она начнет рушиться.

Далее, мы не можем сказать вам, почему ваш код терпит неудачу. У нас нет доступа к данным. Вам придется поставить точку останова в верхней части кода, который вы разместили здесь, и пройти через нее построчно, изучая содержимое переменных и элементов управления, наведя на них курсор мыши, чтобы понять это.