如何在c#中为我的comboBox项添加价格?

时间:2013-03-11 23:09:41

标签: c# winforms combobox

我想知道如何将价格添加到以下内容中:

private void OrderForm_Load(object sender, EventArgs e)
{
    comboBox1.Items.Add("0");
    comboBox1.Items.Add("10");
    comboBox1.Items.Add("20");
    comboBox1.Items.Add("30");
    comboBox1.Items.Add("40");
    comboBox1.Items.Add("50");
    comboBox1.Items.Add("60");
    comboBox1.Items.Add("70");
    comboBox1.Items.Add("80");
    comboBox1.Items.Add("90");
    comboBox1.Items.Add("100");
    comboBox2.Items.Add("None");
    comboBox2.Items.Add("Chocolate");
    comboBox2.Items.Add("Vanilla");
    comboBox2.Items.Add("Strawberry");
    comboBox3.Items.Add("Paypal");
    comboBox3.Items.Add("Visa Electron");
    comboBox3.Items.Add("MasterCard");
    comboBox4.Items.Add("None");
    comboBox4.Items.Add("Small");
    comboBox4.Items.Add("Medium");
    comboBox4.Items.Add("Large");
}

“0 - 100”的数字价格应该分别是“15英镑”吗?

2 个答案:

答案 0 :(得分:4)

组合框显示ToString方法的结果作为项目的名称。这意味着您可以创建包含名称和价格的自己的对象,并覆盖ToString以仅显示名称。例如:

public class MyItem
{
    private readonly string name;
    public string Name
    {
        get { return this.name; }
    }

    private readonly decimal price;
    public decimal Price
    {
        get { return this.price; }
    }

    public MyItem(string name, decimal price)
    {
        this.name = name;
        this.price = price;
    }

    public override string ToString()
    {
        return this.name;
    }
}

然后创建并添加自己的对象。

comboBox2.Items.Add(new MyItem("Chocolate", 10.00m));
comboBox2.Items.Add(new MyItem("Vanilla", 15.00m));
comboBox2.Items.Add(new MyItem("Strawberry", 8.50m));

每当您从组合框中获取项目(例如当前选定的项目)时,Price属性将告诉您价格。例如:

MyItem selectedItem = (MyItem)comboBox2.SelectedItem;
decimal totalPrice = selectedItem.Price + 1.00m /* Shipping */;

答案 1 :(得分:0)

要直接回答您的问题,您可以使用ComboBox.SelectedIndex值,如下所示:

if (comboBox4.SelectedIndex < 100) {
    price = 15;
}

不会把它放在我的代码中。以这种方式编写代码会尖叫“维护地狱”,所以请重新调整代码。我打算按照Martin的使用面向对象来存储名称/价格的解决方案提出建议,所以我建议你去试试。