2014-08-30 85 views
-3

我想要做的就是在一个列表框 进入项目,其价格终于攻克了项目的总价格有什么毛病我在C#windowsform代码

这是我至今

代码
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

异常的堆栈跟踪添加到该问题的文本下面的代码。 – 2014-08-30 23:26:51

回答

2

猜猜它是你的错误尝试转换这样的:

lstShow.Items.Add("---------------------------------"); 

为十进制

Convert.ToDecimal(item); 

,因为它显然不是。删除该值,然后再试一次,或者如果您完全想保留在列表中,请尝试使用Double.TryParse(item);代替。请参阅Double.TryParse()的文档。

+0

好吧,对,但这很难解决问题。在列表框中的价格之前添加了什么_items? – Steve 2014-08-30 23:23:18

+1

@Steve事实上,我刚刚看到最明显的,但你说得对,也可能有其他问题。 – jpw 2014-08-30 23:24:27

1

我建议改变你的类市场增添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); 
} 

列表框将调用类MarketToString()方法以所需格式显示您的数据,但ListBox中的每个项目都是市场实例,不是简单的字符串。这将允许 的计算方法

suma = 0; 
foreach (Market item in lstShow.Items) 
{ 
    suma += item._price; 
} 
txtTotal.Text=suma.ToString(); 

当然除去字符串添加在年底或只是创建一个新的市场与此

Market m = new Market(); 
m._items = "----------------------------------------"; 
m._price = suma; 
lstShow.Items.Add(m);