有没有办法让一个列表框显示,如果单击一个添加按钮,有一个项目没有两行同一项目的倍数?
问题描述:
举例说明: 我有三个项目,每个项目都有一个添加按钮,用于在列表框中显示该项目的名称。如果我点击添加它会显示该项目一次,如果我再次点击添加它会显示项目两次列表框中。这与click事件下这个简单的代码handler-有没有办法让一个列表框显示,如果单击一个添加按钮,有一个项目没有两行同一项目的倍数?
ListBox.Items.Add("ItemName");
有没有一种方法,我可以编写按钮或列表框,而不是显示重复的线条,展现出“X2”或类似的东西,当一个项目被添加两次或更多?
我正在使用C#和Windows窗体应用程序。
答
这可能是我会来那个方式:
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");
}
希望这有助于!
答
如果是我,我会创建一个自定义类(例如,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
是否已经在列表框中。
如果您已经有'x 2',如果您添加名为'x 2'的新项目会怎么样?我更喜欢ListView。 –