代码之家  ›  专栏  ›  技术社区  ›  jjnguy Julien Chastang

如何获取列表框中项目的索引?

  •  3
  • jjnguy Julien Chastang  · 技术社区  · 16 年前

    我正在将项目添加到 ListBox 像这样:

    myListBox.Items.addRange(myObjectArray);
    

    我还想通过以下方式选择我添加的一些项目:

    foreach(MyObject m in otherListOfMyObjects) 
    {
        int index = myListBox.Items.IndexOf(m);
        myListBox.SelectedIndices.Add(index);
    }
    

    index 总是 -1 .

    是否有不同的方法来获取数据库中对象的索引 列表框 ?

    3 回复  |  直到 16 年前
        1
  •  8
  •   Neil Barnwell    16 年前

    你应该确保 MyObject 覆盖 Equals() , GetHashCode() ToString() 所以 IndexOf() 方法可以正确地找到对象。

    从技术上讲 ToString()

        2
  •  7
  •   Kon    16 年前

    您可以对列表框中的值使用某种键,比如guid。这样你就可以很容易地使用 myListBox.Items.FindByValue(value) 找到正确的项目。

        3
  •  0
  •   user1228 user1228    16 年前

    你能做的就是使用linq。下面是一些看起来像C#的伪代码,可以编译并实际工作:

    var items =  from x in myListBox.Items where otherListOfMyObjects.Any(y => y == x /*SEE NOTE*/) select x;
    foreach(item i in items)
      myListBox.SelectedItems.Add(i);
    

    显然,这是行不通的,因为y==x总是返回false(这就是当前方法不起作用的原因)。您需要替换y==x以执行相等比较,该比较将在您为MyObject定义相等时确定相等。您可以通过添加建议的ID或覆盖Neil建议的大量方法(+s)来实现这一点,或者只确定要检查MyObject的哪些属性,以便将它们标识为完全相同的对象。