我想要做的是在列表框中输入商品及其价格 最后捕获物品的总价
这是我到目前为止的代码
private void btnItems_Click(object sender, EventArgs e)
{
Market super = new Market();
// double total = 0;
super._items = txtItems.Text;
txtItems.Text = string.Empty;
super._price = Convert.ToDouble(txtPrice.Text);
txtPrice.Text = string.Empty;
lstShow.Items.Add(super._items + " $ " + super._price);
}
private void btnPrice_Click(object sender, EventArgs e)
{
Market super = new Market();
lstShow.Items.Add("---------------------------------");
decimal suma = 0;
foreach (var item in lstShow.Items)
{
decimal d = Convert.ToDecimal(item); //OJO solo para Winforms y si se metieron los items con un formato compatible con Decimal
suma += d;
}
txtTotal.Text=(suma.ToString());
}
但显示此例外:(
An unhandled exception of type 'System.FormatException' occurred in mscorlib.dll
其他信息:
Input string was not in a correct format
答案 0 :(得分:2)
一个疯狂的猜测是你在尝试转换它时遇到错误:
lstShow.Items.Add("---------------------------------");
到小数
Convert.ToDecimal(item);
因为它显然不是。删除该值并重试,或者如果您想将其保留在列表中,请尝试使用Double.TryParse(item);
。请参阅Double.TryParse()的文档。
答案 1 :(得分:1)
我建议更改您的类Market以添加ToString方法的覆盖
public class Market
{
public string _items {get;set;}
public string _price {get;set;}
public override string ToString()
{
return this._items + " $ " + this._price
}
}
现在,当您向列表框添加项目时,直接添加市场实例
private void btnItems_Click(object sender, EventArgs e)
{
Market super = new Market();
.....
lstShow.Items.Add(super);
}
列表框将调用类ToString()
的{{1}}方法,以所需格式显示您的数据,但ListBox中的每个项目都是Market实例而不是简单字符串。这将允许
计算方法中的以下代码
Market
当然要删除最后添加的字符串,或者只使用此
创建一个新市场suma = 0;
foreach (Market item in lstShow.Items)
{
suma += item._price;
}
txtTotal.Text=suma.ToString();