如果单击添加按钮,是否有一种方法可以使列表框显示一个项目有多个,而没有两行具有相同的项目?
Is there a way to make a list box show that there are multiples of one item without having two rows with the same item if an add button is clicked?
举例说明:
我有三个项目,每个项目都有一个添加按钮,用于在列表框中显示项目的名称。如果我点击添加它会显示该项目一次,如果我再次点击添加它会在列表框中显示该项目两次。这就是点击事件处理程序下的这个简单代码-
ListBox.Items.Add("ItemName");
有没有一种方法可以让我对按钮或列表框进行编码,而不是显示重复行,以便在添加两次或更多项时显示 "x2" 或类似内容?
我正在使用 C# 和 windows 表单应用程序。
如果是我,我会创建一个自定义 class(比如 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
是否已经在列表框中。
这可能是我的方式:
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");
}
希望对您有所帮助!
举例说明: 我有三个项目,每个项目都有一个添加按钮,用于在列表框中显示项目的名称。如果我点击添加它会显示该项目一次,如果我再次点击添加它会在列表框中显示该项目两次。这就是点击事件处理程序下的这个简单代码-
ListBox.Items.Add("ItemName");
有没有一种方法可以让我对按钮或列表框进行编码,而不是显示重复行,以便在添加两次或更多项时显示 "x2" 或类似内容?
我正在使用 C# 和 windows 表单应用程序。
如果是我,我会创建一个自定义 class(比如 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
是否已经在列表框中。
这可能是我的方式:
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");
}
希望对您有所帮助!