2017-04-25 6 views
0

明確にする例: 私は3つの項目を持っています。それぞれの項目には、リストボックス内の項目の名前を表示するための追加ボタンがあります。追加をクリックするとアイテムが一度表示されます。もう一度クリックすると、リストボックスにアイテムが2回表示されます。これは、クリックイベントの下で、この単純なコードhandler-追加ボタンがクリックされた場合、同じ項目を持つ2つの行を持たずに1つの項目の倍数があることをリストボックスに表示する方法はありますか?

ListBox.Items.Add("ItemName"); 

であることは、私が「X2」や似たような項目を表示するには、代わりに繰り返しのラインを示すのボタンやリストボックスをコーディングすることができます方法はあります2回以上追加されていますか?

私はC#とWindowsフォームアプリケーションを使用しています。

+0

既に 'x 2'がある場合は、 'x 2'という名前の新しいアイテムを追加するとどうなりますか?私はこのためにListViewを好む。 –

答えて

0

これはおそらく、私がその時に来る方法です。

private readonly Dictionary<string, int> _dict = new Dictionary<string, int>(); 

    private void AddNewItem(string item) 
    { 
     if (_dict.ContainsKey(item)) _dict[item]++; 
     else _dict.Add(item,1); 
     listBox1.Items.Clear(); 
     foreach (KeyValuePair<string, int> kvp in _dict) 
     { 
      if (kvp.Value > 1) listBox1.Items.Add(kvp.Key + " X" + kvp.Value); 
      else listBox1.Items.Add(kvp.Key); 
     } 
    } 
    private void button1_Click(object sender, EventArgs e) 
    { 
     AddNewItem("ItemName"); 
    } 

は、この情報がお役に立てば幸い!

2

私の場合は、カスタムクラス(例:CountableItem)を作成し、数量フィールドと名前フィールドを付けます。次に、ToString()メソッドをオーバーライドして、ListBoxに表示される内容を決定します。このような

何か:

internal class CountableItem 
{ 
    private string _itemName; 
    private int _count; 

    public CountableItem(string itemName) 
    { 
     _itemName = itemName; 
     _count = 1; 
    } 

    public void Increment() 
    { 
     _count++; 
    } 

    public override string ToString() 
    { 
     return String.Format("{0} x {1}", _itemName, _count); 
    } 
} 

あなたがリストボックスにCountableItemのインスタンスを追加して、量を増やすためにIncrement()メソッドを使用することができます。

CountableItemが既にListBoxに入っているかどうかを判断するロジックが必要です。

関連する問題