我在C#windows窗体中的代码有什么问题

时间:2014-08-30 23:15:13

标签: c# visual-studio

我想要做的是在列表框中输入商品及其价格 最后捕获物品的总价

这是我到目前为止的代码

 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

2 个答案:

答案 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();