C#Windows窗体 - 如何为组合框字符串指定double值,然后在文本框中显示?

时间:2016-02-08 00:56:34

标签: c# windows forms combobox textbox

我一直在找到解决我的编码问题的方法,即为组合框项目分配一个double值,然后显示该double值并将其添加到文本框中。

例如,饮料组合框包含:苏打水,茶,咖啡,牛奶,果汁等。因此,对于“苏打水”,我想给它1.95美元的价值,然后显示在“小计:”文本中框。因此,每次在组合框中选择一个项目时,比如苏打水,果汁和咖啡,每次选择一个项目时,它都会添加到文本框中的上一个小计值。

对不起,如果不是太清楚,但任何帮助都会很棒,我已经消失了,并试图找出一段时间的解决方案而且一直在努力。谢谢!

2 个答案:

答案 0 :(得分:1)

这将完美地使用自定义类型。在这种情况下,您可以创建一个带有Description属性和Price属性的Drink类。重写.ToString()方法以仅显示Description。

class Drink
{
    public string Description { get; set; }
    public decimal Price { get; set; }

    public override string ToString()
    {
        return Description;
    }
}

从那里你将实例化一个新的Drink,填充Description和Price并将该对象添加到你的组合框中。你的组合框会显示" Soda"但该物品的价格属性也是1.95。

private void Form1_Load(object sender, EventArgs e)
{

    //for demonstration purposes, we're creating 3 Drink
    //objects and adding them to the combobox. Normally
    //you would loop through a data source of some sort
    //and populate your combobox with the newly intantiated objects.
    Drink item;

    item = new Drink();
    item.Description = "Soda";
    item.Price = 1.80M;
    comboBox1.Items.Add(item);

    item = new Drink();
    item.Description = "Coffee";
    item.Price = .95M;
    comboBox1.Items.Add(item);

    item = new Drink();
    item.Description = "Tea";
    item.Price = .65M;
    comboBox1.Items.Add(item);

}

由于组合框持有一个物体,你需要将选定的物品投射回饮品,以便你可以从选择中获得价格。

private void button1_Click(object sender, EventArgs e)
{
    decimal itemPrice;
    //if the textbox is empty or cannot be parsed to a decimal
    //then we cast the combobox1.SelectedItem to a Drink type
    //place that value into the textbox. If, however, it can be
    //parsed to a decimal then we grab that value and add the
    //price of our newly selected combobox item to the price
    //that is currently in the textbox.
    if(decimal.TryParse(textBox1.Text, out itemPrice))
    {
        textBox1.Text = (itemPrice + ((Drink)(comboBox1.SelectedItem)).Price).ToString();
    }
    else
    {
        textBox1.Text = (((Drink)(comboBox1.SelectedItem)).Price).ToString();
    }
}

答案 1 :(得分:0)

如果我能正确理解您的问题(请提供您下次尝试的内容,这样我们就可以更轻松地提供帮助。)您可以使用字典将饮料映射到价格中。

var priceMapping = new Dictionary<string, double>()
{
    { "Soda", 1.75 },
    { "Tea", 2.00 },
    { "Coffee", 1.50 }
    //etc...
};

然后,在组合框的选定索引更改事件上,您可以执行以下操作:

ComboBox comboBox = sender as ComboBox;
if (comboBox != null && comboBox.SelectedItem != null)
{
    //For simplicity sake, I left error handling
    //You'll want to use double.TryParse to handle any unexpected text in the subtotal textbox.
    double price = Convert.ToDouble(subTotalTb.Text) + priceMapping[comboBox.SelectedItem.ToString()];
    subTotalTb.Text = price.ToString();
}