2017-04-25 36 views
0

舉例說明: 我有三個項目,每個項目都有一個添加按鈕,用於在列表框中顯示該項目的名稱。如果我點擊添加它會顯示該項目一次,如果我再次點擊添加它會顯示項目兩次列表框中。這與click事件下這個簡單的代碼handler-有沒有辦法讓一個列表框顯示,如果單擊一個添加按鈕,有一個項目沒有兩行同一項目的倍數?

ListBox.Items.Add("ItemName"); 

有沒有一種方法,我可以編寫按鈕或列表框,而不是顯示重複的線條,展現出「X2」或類似的東西,當一個項目被添加兩次或更多?

我正在使用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是否已經在列表框中。

相關問題