【问题标题】:How do I get the SelectedItem or SelectedIndex of ListView in vb.net?如何在 vb.net 中获取 ListView 的 SelectedItem 或 SelectedIndex?
【发布时间】:2012-01-31 09:48:03
【问题描述】:

正如你所知道的那样,我想要什么。我正在使用列表框。在ListBox 中,我们可以通过简单的一行代码获得选中的项目: listbox1.SelectedItem。现在我使用ListView,我如何得到ListViewSelectedItemSelectedIndex

【问题讨论】:

  • 你的问题很简单,不应该在这类网站上问。您可以进行搜索,而不是在此处发布。 ListView.SelectedItems[0]
  • @MahanGM 你不明白我的问题。我问过“我如何获得选定的项目?”。我的意思是“当我点击某个项目时(没有像你一样提到“[0]”)它被选中了。现在应用程序如何知道哪个项目(通过索引或其他)现在被选中了。”

标签: vb.net winforms listview


【解决方案1】:

ListView 通过SelectedItemsSelectedIndices 属性返回选定项和索引的集合。请注意,如果当前未选择任何项目,则这些集合为空 (lst.SelectedItems.Count = 0)。选择的第一个项目是lst.SelectedItems(0)Items 集合中此项的索引为 lst.SelectedIndices(0)。所以基本上

lst.SelectedItems(0)

相同
lst.Items(lst.SelectedIndices(0))

您也可以使用复选框。为此,将CheckBoxes 设置为True。通过CheckedItemsCheckedIndices 属性,您可以看到检查了哪些项目。

【讨论】:

    【解决方案2】:

    这是我为我的问题找到的答案:

    urlList1.FocusedItem.Index
    

    我通过以下方式获得选定的项目值:

    urlList1.Items(urlList1.FocusedItem.Index).SubItems(0).Text
    

    【讨论】:

    • 小心,当没有选择任何项目时,这会给你空异常。
    【解决方案3】:
    ListView.FocusedItem.Index 
    

    或者你可以像这样使用 foreach 循环

    int index= -1;
    foreach (ListViewItem itm in listView1.SelectedItems)
    {
        if (itm.Selected)
        {
            index= itm.Index;
        }
    }
    

    【讨论】:

      【解决方案4】:

      VB6: Listview1.selecteditem

      VB10: Listview1.FocusedItem.Text

      【讨论】:

      • 我想指出 Excel VBA(2010 和可能的其他版本)的行为与 VB6 相同。
      • 我一直在尝试获取 ListView 选择的值,而 Listview1.FocusedItem.Text 是唯一对我有用的东西。谢谢!
      【解决方案5】:

      如果您想使用listviewlistbox 中选择相同的项目,您可以使用:

      Private Sub ListView1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListView1.SelectedIndexChanged
          For aa As Integer = 0 To ListView1.SelectedItems.Count - 1
              ListBox1.SelectedIndex = ListView1.SelectedIndices(aa)
          Next
      End Sub
      

      【讨论】:

      • 假设两个项目都按照您期望的方式排列,在相同的索引处。
      【解决方案6】:
      Private Sub ListView1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles ListView1.Click
              Dim tt As String
              tt = ListView1.SelectedItems.Item(0).SubItems(1).Text
              TextBox1.Text = tt.ToString
      End Sub
      

      【讨论】:

      • 只是提醒一下,tt 已经声明为string,而ListView.text 属性是string 类型,因此无需添加.ToString在最后一行。
      【解决方案7】:

      请尝试使用此方法获取列索引

      Private Sub lvDetail_MouseMove(sender As Object, e As MouseEventArgs) Handles lvDetail.MouseClick
      
          Dim info As ListViewHitTestInfo = lvDetail.HitTest(e.X, e.Y)
          Dim rowIndex As Integer = lvDetail.FocusedItem.Index
          lvDetail.Items(rowIndex).Selected = True
          Dim xTxt = info.SubItem.Text
          For i = 0 To lvDetail.Columns.Count - 1
              If lvDetail.SelectedItems(0).SubItems(i).Text = xTxt Then
                  MsgBox(i)
              End If
          Next
      End Sub
      

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-25
      • 2017-09-29
      • 1970-01-01
      相关资源
      最近更新 更多