使用自定义比较设置ListBox.SelectedItem

时间:2018-06-06 21:07:00

标签: .net winforms listbox

我创建了一个实现IComparable<>的类。这样的事情。

public class Entry : IComparable<Entry>
{
    private string Data;

    public Entry(string data)
    {
        Data = data;
    }

    // Implementation...

    public int CompareTo(Entry entry)
    {
        return Data.CompareTo(entry.Data);
    }
}

然后我用这些对象填充ListBox控件。

我的期望是我可以做以下的事情。但这似乎没有效果(并且没有抛出异常)。

Entry entry = new Entry("...");
MyListBox.SelectedItem = entry;

我认为它会使用我的自定义比较代码来查找匹配的项目。但是,如果我在Entry.CompareTo()中设置断点,它就永远不会被击中。

在网上搜索有关设置SelectedItem属性的信息似乎相当薄。有人可以解释这里发生的事情。

1 个答案:

答案 0 :(得分:1)

尝试实现IEquatable接口。由于您显然不关心对象比较,您只需在数据字段(可能应该是属性)上返回String.Equals结果的结果。

public class Entry : IEquatable<Entry>  {
  private string Data = string.Empty;

  public Entry(string data) {
    Data = data;
  }

  public bool Equals(Entry other) {
    if (other == null) return false;
    return String.Equals(this.Data, other.Data);
  }

  public override bool Equals(object obj) {
    return Equals(obj as Entry);
  }

  public override int GetHashCode() {
    return this.Data.GetHashCode();
  }
}