转发到列表框中的下一个项目?

时间:2014-08-24 14:29:52

标签: vb.net winforms listbox

我正在使用VB WinForms应用程序。在名为list的列表框中包含以下项:

Ant 
Cat
Ball
Dog
..

01
03
04
02
..

我想按字母顺序或以数字顺序转到下一个项目。例如,用户选择' Ball'然后按一个按钮,然后所选项目必须更改为“Cat'”。列表框不是数据绑定。

2 个答案:

答案 0 :(得分:1)

您的问题需要解决两个问题:

  1. 你有无序的ListBoxes
  2. 您的ListBox可能包含字符串值或数字值(String / Integer),您需要能够找到下一个项目在这两种情况下。
  3. 例如

    "11"
    "01"
    "02"
    "22"
    

    或者类似

    之类的东西
    "11"
    "1"
    "111"
    "2"
    "22"
    

    如果您将此列表排序为String,您将获得 1,11,111,2,22 这是错误的,您需要将其排序为{{ 1}}获得 1,2,11,22,111

    我的解决方案处理字符串和数值,并正确排序这种数字列表。

    您可以在按钮Integer事件

    中使用此代码
    click

答案 1 :(得分:0)

你可以这样做

  1. 获取列表框项目的排序数组
  2. 从已排序的所选项目数组中查找索引:找到索引
  3. 如果数组的最后一个索引超过找到的索引,则将+1添加到该索引
  4. 现在,通过找到索引从排序数组中获取下一个项目:找到项目
  5. 使用FindStringExact()方法从ListBox中查找找到的项目的索引
  6. 如果返回的索引不是-1,则将该索引设置为SelectedIndex property。

  7. Dim items() As String = listBox1.Items.Cast(Of String)().OrderBy(Function(x) x).ToArray()
    Dim iIndex As Integer = -1
    If ListBox1.SelectedIndex <> -1 Then
        iIndex = Array.IndexOf(items, ListBox1.SelectedItem.ToString())
    End If
    If iIndex >= (items.Length - 1) Then iIndex = -1
    Dim strItem As String = items(iIndex + 1)
    
    iIndex = ListBox1.FindStringExact(strItem, ListBox1.SelectedIndex)
    If iIndex > -1 Then
        ListBox1.SelectedIndex = iIndex
    End If
    

    FindStringExact()方法的第二个参数中我们已经分配了listBox1.SelectedIndex coz,即使该项目是重复的,具有不同的索引,那么它应该在该项目之后进行检查。