1

コンボボックスに値を追加するために使用されるクラスがあります(1つは表示に使用され、もう1つは非表示に使用されます)

public class ComboBoxItem
    {
        string displayValue;
        string hiddenValue;

    //Constructor
    public ComboBoxItem(string displayVal, string hiddenVal)
    {
        displayValue = displayVal;
        hiddenValue = hiddenVal;
    }

    //Accessor
    public string HiddenValue
    {
        get
        {
            return hiddenValue;
        }            
    }
    //Override ToString method
    public override string ToString()
    {
        return displayValue;
    } 

このクラスを使用して、コンボボックスに値を追加します

cmbServerNo.Items.Add(new ComboBoxItem(strIPAddress, iConnectionID.ToString()));

しかし、私は以下のアプローチを使用している重複値を制限したい

foreach (KeyValuePair<int, Object> ikey in m_lstConnectionID)
            {
                if (!cmbServerNo.Items.Contains(strIPAddress))
                {
                    cmbServerNo.Items.Add(new ComboBoxItem(strIPAddress, iConnectionID.ToString()));
                }
            } 

しかし、それは strIpAddress と ConnectionID の両方を追加すると推測するので、含まれていることを確認すると失敗します。この問題を解決するには? ありがとう

4

3 に答える 3

1

LINQ のAny拡張メソッドを使用できます。

if (!cmbServerNo.Items.Any(x => x.ToString() == strIPAddress))
{
    cmbServerNo.Items.Add(new ComboBoxItem(strIPAddress,
                                           iConnectionID.ToString()));
}
于 2012-05-09T11:59:57.453 に答える
0

HashSetを使用できます(MSDN

HashSet<String> items = new HashSet<String>();
foreach (KeyValuePair<int, Object> ikey in m_lstConnectionID)
            {
                if (!items.Contains(strIPAddress))
                {
                    items.Add(strIPAddress);
                    cmbServerNo.Items.Add(new ComboBoxItem(strIPAddress, iConnectionID.ToString()));
                }
            } 
于 2012-05-09T12:38:52.633 に答える
0

Items.ContainsListBox または ComboBox から関数を使用する場合、オブジェクトはIEquatableインターフェイスを実装する必要があります。

このようなもの:

public class ComboBoxItem : IEquatable<ComboBoxItem> {
  // class stuff

  public bool Equals(ComboBoxItem other) {
    return (this.ToString() == other.ToString());
  }

  public override bool Equals(object obj) {
    if (obj == null)
      return base.Equals(obj);

    if (obj is ComboBoxItem)
      return this.Equals((ComboBoxItem)obj);
    else
      return false;
  }

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

これで、次のように動作するItems.Containsはずです:

// this should be added:
ComboBoxItem addItem = new ComboBoxItem("test", "test item");
if (!cb.Items.Contains(addItem)) {
  cb.Items.Add(addItem);
}

// this should not be added:
ComboBoxItem testItem = new ComboBoxItem("test", "duplicate item");
if (!cb.Items.Contains(testItem)) {
  cb.Items.Add(testItem);
}
于 2012-05-09T12:58:47.587 に答える