2013-11-15 2 views
0

Я пытаюсь получить значение из ListView в vb.net, но постоянно получаю ошибку:vb.net извлекать элементы из Listview на SelectedIndexChanged

«SelectedItem» не является членом «системы. Windows.Forms.ListView.

Я думаю, мне нужно изменить eventargs на какой-то другой тип события, но я борюсь с этим. Может кто-нибудь, пожалуйста, укажет на мою ошибку. Благодаря

Sub filllistview() 
     Try 
      'creatconn() 
      cn.Open() 
      Dim cmd As OleDbCommand = New OleDbCommand("Select * from Customers", cn) 
      dr = cmd.ExecuteReader() 
      While dr.Read() 
       ListView1.Items.Add(dr(0).ToString()) 
       ListView1.Items(ListView1.Items.Count - 1).SubItems.Add(dr(1)) 

      End While 

     Catch ex As Exception 
      System.Windows.Forms.MessageBox.Show(ex.Message) 
     Finally 
      dr.Close() 
      cn.Close() 
     End Try 
    End Sub 

Нужно поймать здесь

Private Sub ListView1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As EventArgs) Handles ListView1.SelectedIndexChanged 
     Try 
      showcontectsinlistview() 
      str = ListView1.SelectedItem **<--- ERROR** 

     Catch ex As Exception 
      MessageBox.Show(ex.Message) 
     End Try 
    End Sub 

ответ

2

Это верно beacuse не существует свойство "SelectedItem". Объект ListView имеет свойство «SelectedItems», то есть коллекцию. Таким образом, вы можете использовать что-то вроде: listView1.SelectedItems[0].

При этом у вас будет первый выбранный элемент в коллекции, заданный свойством «SelectedItems». Для того, чтобы перемещаться по всем выбранным элементам, вы можете петлю между ними следующим образом:

For Each itm As ListViewItem In ListView1.SelectedItems 
If itm.Selected Then 
    For i As Integer = 0 To itm.SubItems.Count - 1 
     str += itm.SubItems(i).Text 
    Next 
End If 
Next 

Таким образом, вы строите строку со всеми значениями всех выбранных элементов. Если в списке есть только один выбранный элемент, у вас будет только это значение.

+0

Все та же ошибка Стефано. Спасибо – user1532468

+0

Я редактирую ответ. И, пока мы здесь, объясните, какой тип переменной является «str», спасибо. –

+0

Dim str As String = Nothing. Спасибо – user1532468

0

Посмотрите на этот пример

Private Sub lstDirectoryInfo_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lstDirectoryInfo.SelectedIndexChanged 
    Dim str As String = String.Empty 

    For Each itm As ListViewItem In lstDirectoryInfo.SelectedItems 
     If itm.Selected Then 
      For i As Integer = 0 To itm.SubItems.Count - 1 
       str = itm.SubItems(i).Text 
      Next 
     End If 
    Next 
    MessageBox.Show(str) 
End Sub 
Смежные вопросы