Question Double Click Listview selected item and show in picturebox

Dwhite

Member
Joined
Nov 10, 2020
Messages
17
Programming Experience
1-3
Evening all,

Hope all are well.

As the title says im having difficulty with selecting listview item and displaying in a picturebox. Basically i want to doubleclick an image in a listview and the item will show in a picturebox. If you are able to provide assistance please let me know. i keep receiving "System.ArgumentException: 'Parameter is not valid.'" I have added my codes below.
VB.NET:
     Private Sub ListView1_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles ListView1.DoubleClick
        Dim list As New List(Of Bitmap)
        Dim gameObject As New Dictionary(Of Integer, Bitmap)

        ListView1.Items.Add(0)
        ListView1.Items.Add(1)
        ListView1.Items.Add(2)

        gameObject.Add(1, New Bitmap("Picture1.jpg"))
        gameObject.Add(2, New Bitmap("Picture2.jpg"))
        gameObject.Add(3, New Bitmap("Picture3.jpg"))
        Dim i As Integer
        i = CInt(ListView1.SelectedItems(0).Text.ToString)
        PictureBox1.Image = gameObject(i)
    End Sub
 
Last edited by a moderator:

jmcilhinney

VB.NET Forum Moderator
Staff member
Joined
Aug 17, 2004
Messages
14,723
Location
Sydney, Australia
Programming Experience
10+
That code doesn't make much sense as it is. You handle the DoubleClick event and THEN you create the items and the images. Surely you want to create the items and the images when the form loads, so that you've actually got something to double-click and display.

You should start by handling the Load event of the form and create the items and images there. I'd suggest assigning each Bitmap object to the Tag property of the corresponding ListViewItem. You can then easily get the image once you have the item.

You should then handle the MouseDoubleClick event of the ListView. That will give you the coordinates of the mouse so you can then call the HitTest method to determine if it was over an item and which item that was. Once you have the item, get the Image from the Tag property and display it in the PictureBox.
 

Dwhite

Member
Joined
Nov 10, 2020
Messages
17
Programming Experience
1-3
That code doesn't make much sense as it is. You handle the DoubleClick event and THEN you create the items and the images. Surely you want to create the items and the images when the form loads, so that you've actually got something to double-click and display.

You should start by handling the Load event of the form and create the items and images there. I'd suggest assigning each Bitmap object to the Tag property of the corresponding ListViewItem. You can then easily get the image once you have the item.

You should then handle the MouseDoubleClick event of the ListView. That will give you the coordinates of the mouse so you can then call the HitTest method to determine if it was over an item and which item that was. Once you have the item, get the Image from the Tag property and display it in the PictureBox.
Sorry. I tried the following and nothing happens. Any suggestions would be much appreciated.
VB.NET:
Private Sub ListView1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles ListView1.MouseDown
    Dim objDrawingPoint As Drawing.Point
    Dim objListViewItem As ListViewItem

    If e.Button = Windows.Forms.MouseButtons.Left Then Return

    objDrawingPoint = ListView1.PointToClient(Cursor.Position)

    If Not IsNothing(objDrawingPoint) Then
        With objDrawingPoint
            objListViewItem = ListView1.GetItemAt(.X, .Y)
        End With

        If IsNothing(objListViewItem) Then
            PictureBox1.Image = Nothing
        Else
            PictureBox1.Image = ImageList1.Images(objListViewItem.ImageIndex)
        End If
    End If
End Sub
 
Last edited by a moderator:

jmcilhinney

VB.NET Forum Moderator
Staff member
Joined
Aug 17, 2004
Messages
14,723
Location
Sydney, Australia
Programming Experience
10+
You say that nothing happens but that's not true. Something happens, but it may just not be what you want or expect. You need to debug your code to find out what actually happens. Set a breakpoint and step through the code. I suspect that I know what the problem is but I'll let you debug first, because you should always do that first, before posting here.
 

Dwhite

Member
Joined
Nov 10, 2020
Messages
17
Programming Experience
1-3
Sorry. I tried the following and nothing happens. Any suggestions would be much appreciated.
VB.NET:
Private Sub ListView1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles ListView1.MouseDown
    Dim objDrawingPoint As Drawing.Point
    Dim objListViewItem As ListViewItem

    If e.Button = Windows.Forms.MouseButtons.Left Then Return

    objDrawingPoint = ListView1.PointToClient(Cursor.Position)

    If Not IsNothing(objDrawingPoint) Then
        With objDrawingPoint
            objListViewItem = ListView1.GetItemAt(.X, .Y)
        End With

        If IsNothing(objListViewItem) Then
            PictureBox1.Image = Nothing
        Else
            PictureBox1.Image = ImageList1.Images(objListViewItem.ImageIndex)
        End If
    End If
End Sub
I got the application in break mode and received the following error:

System.InvalidCastException: 'Unable to cast object of type 'System.EventArgs' to type 'System.Windows.Forms.MouseEventArgs'.'

I changed the handles from mousedown to mouseclick and still receive the same error.
 

Dwhite

Member
Joined
Nov 10, 2020
Messages
17
Programming Experience
1-3
I got the application in break mode and received the following error:

System.InvalidCastException: 'Unable to cast object of type 'System.EventArgs' to type 'System.Windows.Forms.MouseEventArgs'.'

I changed the handles from mousedown to mouseclick and still receive the same error.

Also wanted to add the following to show how i populate images in the listview:

Private Sub populate()
Dim imgs As ImageList = New ImageList()
imgs.ImageSize = New Size(75, 75)
Dim itemsfolder As New List(Of ListViewItem)

'listview1.view is needed to show jpeg screenshot in listview********
ListView1.View = View.LargeIcon


Try
For Each fpath In Directory.GetFiles("\\FolderNameWhereImagesAreStored" & TextBox2.Text)
If fpath.Contains(TextBox2.Text) Then
imgs.Images.Add(Image.FromFile(fpath))
itemsfolder.Add(New ListViewItem(Path.GetFileName(fpath)) With {.ImageIndex = imgs.Images.Count - 1})

End If
Next



ListView1.Items.AddRange(itemsfolder.ToArray())

Catch ex As Exception

End Try
ListView1.LargeImageList = imgs
' ListView1.Items.Add("Name", 0)

End Sub
 

Abby

New member
Joined
Mar 28, 2022
Messages
1
Programming Experience
Beginner
Have you finally solved that problem of yours? I do to have the same problem so I was hoping if u could share it
 
Top Bottom