我一直在找到解决我的编码问题的方法,即为组合框项目分配一个double值,然后显示该double值并将其添加到文本框中。
例如,饮料组合框包含:苏打水,茶,咖啡,牛奶,果汁等。因此,对于“苏打水”,我想给它1.95美元的价值,然后显示在“小计:”文本中框。因此,每次在组合框中选择一个项目时,比如苏打水,果汁和咖啡,每次选择一个项目时,它都会添加到文本框中的上一个小计值。
对不起,如果不是太清楚,但任何帮助都会很棒,我已经消失了,并试图找出一段时间的解决方案而且一直在努力。谢谢!
答案 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();
}