Gopal
Gopal

Reputation: 12012

List view Double click Event

Using VB6

Listview

ID Name 

001 Raja
002 Ramu
003 Sajee
..
…

Code

Private Sub listview1_DblClick()

      If Not (listview1.SelectedItem Is Nothing) Then
         Textbox1.text = listview1.selectedItem(0)
        Textbox2.text = listview1.SelectedItem(1)
      End If
End Sub

Above code is not showing the values in the text box

How to show the list view row values in the text box.

Need VB6 Code Help

Upvotes: 0

Views: 14130

Answers (2)

Maverik
Maverik

Reputation: 5681

I dont have vb6 at hand and its been a while since I used it, but if memory serves me right:

ListView1.SelectedItem will return you a ListViewItem which gives you a Text property along with SubItems property that gives you access to associated columns as an array.

Upvotes: 0

Jay Riggs
Jay Riggs

Reputation: 53593

The ListView SelectedItem property does not return a collection of items selected on your ListView, so therefore you can't explicitly get the first selected item, the second selected item, etc. You will need to loop through all ListItems in your ListView and check if each is selected. If it is, do what you want to do.

One problem I see with your sample code is you're using the ListView DblClick event. I might be wrong, but it looks like whenever it fires only one ListView item can be selected (the one that fired the event). A solution for this is to put your code into a new procedure. Here's one that should work:

Private Sub GetSelectedItems()
  ' Make sure exactly two items are selected on our ListView.
  If (CheckListViewSelectedItemCount(listview1, 2)) Then
      Dim blnFoundFirstItem As Boolean
      blnFoundFirstItem = False
      Dim i As Integer
      ' Find out which items are selected.
      For i = 1 To listview1.ListItems.Count
        If (listview1.ListItems(i).Selected) Then
            ' Assign the Text of the 'first' selected item to Textbox1.Text.
            If (Not blnFoundFirstItem) Then
                Textbox1.Text = listview1.ListItems(i).Text
                blnFoundFirstItem = True
            ' Assign the Text of the 'second' selected item to Textbox2.Text.
            Else
                Textbox2.Text = listview1.ListItems(i).Text
            End If
        End If
      Next i
  Else
    MsgBox "You need to select two items."
  End If
End Sub

I'm not sure in which order ListItems are iterated through in my For loop. It's possible that what would be assigned to Textbox1.Text in my code you might want to assign to Textbox2.Text.

Your code required at that at least two items are selected on the ListView. I don't know if VB6 has a way to return the number of selected items so I wrote a small function that does this:

' Return True if the passed ListView control has a number of selected items that's equal to the intExpectedItemCount parameter.
Private Function CheckListViewSelectedItemCount(listView As listView, intExpectedItemCount As Integer) As Boolean
    Dim intSelectedItemCount As Integer
    intSelectedItemCount = 0
    Dim i As Integer
    For i = 1 To listView.ListItems.Count
        If (listView.ListItems(i).Selected) Then
            intSelectedItemCount = intSelectedItemCount + 1
        End If
    Next i
    CheckListViewSelectedItemCount = (intSelectedItemCount = intExpectedItemCount)
End Function

Upvotes: 2

Related Questions