Dynami c PictureBox Создание и присоединение к TabControl - PullRequest
0 голосов
/ 22 января 2020

Я пытаюсь создать динамические c PictureBoxes из базы данных для отображения нескольких изображений и, наконец, прикрепить эти изображения в TabControl. Я попробовал что-то следующее, что выдает исключение - Объект не найден :

    For Each dr In dbdataset.Rows
        Dim pics As PictureBox() = New PictureBox(2) {}
        Dim imgBytes As Byte() = CType(dr("image"), Byte()) 'Image in blob

        Dim tc As TypeConverter = TypeDescriptor.GetConverter(GetType(Bitmap))
        Dim MyBitmap As Bitmap = CType(tc.ConvertFrom(imgBytes), Bitmap)

        For i As Integer = 0 To dbdataset.Rows.Count 'Getting the exception here
            pics(i).Image = MyBitmap
            TabPage1.Controls.Add(pics(i))
        Next
    Next
Catch ex As Exception
    MessageBox.Show(ex.Message)
End Try 

Что-нибудь, что я пропустил здесь, хотя я объявил PictureBox создание объекта в начале?

Образец :

Image Gallery

1 Ответ

3 голосов
/ 23 января 2020

Я использовал List(Of T), поэтому мне не пришлось беспокоиться о размере массива. Я сделал 2 списка, один для графических блоков и один для растровых изображений.

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

Наконец, я перебрал графические блоки, добавив .Image из списка растровых изображений. Наконец, увеличивайте индекс на каждой итерации.

Эти строки

        Dim imgBytes As Byte() = DirectCast(dr("image"), Byte()) 'Image in blob
        Dim tc As TypeConverter = TypeDescriptor.GetConverter(GetType(Bitmap))
        Dim MyBitmap = CType(tc.ConvertFrom(imgBytes), Bitmap)

Я не проверял, кроме как перейти на DirectCast, который я считаю более быстрым (пропускает некоторую проверку кода). Я предполагаю, что вы знаете о графике гораздо больше, чем я.

Private Sub OPCode()
    Dim pics As New List(Of PictureBox)
    For index = 0 To dbdataset.Rows.Count - 1
        Dim pic As New PictureBox
        pic.Name = "PB" & index.ToString

        pics.Add(pic)
    Next
    Dim Bitmaps As New List(Of Bitmap)
    For Each dr As DataRow In dbdataset.Rows
        Dim imgBytes As Byte() = DirectCast(dr("image"), Byte()) 'Image in blob
        Dim tc As TypeConverter = TypeDescriptor.GetConverter(GetType(Bitmap))
        Dim MyBitmap = CType(tc.ConvertFrom(imgBytes), Bitmap)
        Bitmaps.Add(MyBitmap)
    Next
    Dim i As Integer
    For Each picBox In pics 'Getting the exception here
        picBox.Image = Bitmaps(i)
        FlowLayoutPanel2.Controls.Add(picBox)
        i += 1
    Next
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...