输入字符串格式不正确

时间:2014-04-07 05:20:12

标签: c# textbox

有两个名为unitprice.txtquantity.txt的文本框。还有另一个名为total.txt的文本框,它会随着用户输入单位价格和数量而不断更新。

Oonce用户输入这两个文本框变空,total.txt按总数更新。它需要不断完成,但在我的代码中它不是并且说

INPUT STRING WASN'T IN A CORRECT FORM.

int tot = 0;
int sum = 0;   
tot = int.Parse(unitprice.Text) * int.Parse(quantitytxt.Text);
sum = int.Parse(total.Text) + tot;
total.Text = sum.ToString();

一旦用户输入单价和数量,总文本框就会被更新。再次用户输入第二个项目的单价和数量,然后需要更新总文本框中的上一个值,这意味着需要将第二个项目生成的新总计添加到之前的总数中。(2500 + 3000 = 5500)

嘿,它以这种方式解决了。

int sum = 0;
private void button2_Click(object sender, EventArgs e)
{
try
{
    sum += int.Parse(qtytxt.Text) * int.Parse(unitprice.Text);
    total.Text = sum.ToString();    
}
catch (Exception er)
{
    MessageBox.Show(er.Message);
}

8 个答案:

答案 0 :(得分:1)

首先检查文本框值是否为空,如果它变为空,则将0设置为默认值,同时转换为解析Int,否则将显示异常。看下面的代码,它会对你有帮助。

int tot = 0;
int sum = 0;
tot = int.Parse(string.IsNullOrEmpty(unitprice.Text.Trim()) ? "0" : unitprice.Text.Trim()) * int.Parse(string.IsNullOrEmpty(quantitytxt.Text.Trim()) ? "0" : quantitytxt.Text.Trim());
sum = int.Parse(string.IsNullOrEmpty(total.Text.Trim()) ? "0" : total.Text.Trim()) + tot;
total.Text = sum.ToString();   

答案 1 :(得分:0)

您正在尝试将文本框值的字符串值解析为整数,因此您不应该执行上述操作,因为它可能包含空字符串或空值。因此,请遵循以下转换方法,以便不会发生错误。

tot = Convert.ToInt32(Convert.ToString(unitprice.Text)) * Convert.ToInt32(Convert.ToString(quantitytxt.Text));

为什么你应该遵循上面的方法,Convert.ToString()将处理空值并将空值转换为空字符串,Convert.ToInt32()将空字符串转换为0值。

答案 2 :(得分:0)

如果您想要其他选项,可以尝试Int32.TryParse(a_string_here,an_out_int_here);

有关详情,请查看此处的文档:MSDN TryParse

它接受一个字符串并尝试将其解析为有效的int ...如果失败,则返回0.

int a ;

Int32.TryParse("5",out a);
System.Out.WriteLine("a="+a); // Will be: a=5

Int32.TryParse("e",out a);
System.Out.WriteLine("a="+a); // Will be: a=0

答案 3 :(得分:0)

如果输入值不是整数,

Int32.Parse()将抛出异常。使用Int32.TryParse()转换值而不抛出异常。如果转换失败,TryParse()将返回false并返回零:

int intValue = -1;
bool result;
result = Int32.TryParse("23", out intValue); // result = true, intValue = 23
result = Int32.TryParse("AB", out intValue); // result = false, intValue = 0 

编辑:针对您的具体情况,请尝试以下方法:

int tot = 0;
int sum = 0;   
int price = 0;                           // output parameter to receive value
int quantity = 0;                        // output parameter to receive value
int total = 0;                           // output parameter to receive value
TryParse(unitprice.Text, out price);     // price contains the unit price value
TryParse(quantitytxt.Text out quantity); // quantity contains the quantity value
TryParse(total.Text, out total);         // total contains the total value
tot = price * quantity;
sum = total + tot;
total.Text = sum.ToString();

答案 4 :(得分:0)

首先检查文本框值是否为空,好像你将它解析为Int,当它为空时,会有这个或类似的异常。

int tot = 0;
int sum = 0;   
tot = int.Parse(unitprice.Text!=String.Empty?unitprice.Text:"0") * int.Parse(quantitytxt.Text!=String.Empty?quantitytxt.Text:"0");
sum = int.Parse(total.Text!=String.Empty?total.Text:"0") + tot;
total.Text = sum.ToString();

您也可以尝试:

int tot = 0;
int sum = 0;   
tot = Convert.ToInt32(unitprice.Text!=String.Empty?unitprice.Text:"0") * Convert.ToInt32(quantitytxt.Text!=String.Empty?quantitytxt.Text:"0");
sum = Convert.ToInt32(total.Text!=String.Empty?total.Text:"0") + tot;
total.Text = sum.ToString();

答案 5 :(得分:0)

试试这个:

int tot = 0;
int sum = 0;   
tot = Convert.ToInt32(unitprice.Text.Replace(" ", "")) * Convert.ToInt32(quantitytxt.Text.Replace(" ", ""));
sum = Convert.ToInt32(total.Text.Replace(" ", "")) + tot;
total.Text = sum.ToString();

如果这会引发异常,您的文本框可能包含不需要的字符(即逗号:" 1,000.00"或字母)或为空,这会导致转换抛出异常。

答案 6 :(得分:0)

问题是......如果字符串不是数字............

除了数字之外的任何字符串值都会显示错误,表示输入字符串已经过了正确的形式!!!。

有一个解决方案.....将你的代码插入try catch块

try{ your code here}catch(FormatException){}

或找到另一种机制来避免数字以外的字符串......

答案 7 :(得分:0)

int tot = 0;
int sum = 0; 
tot = int.Parse(unitprice.Text+"0") * int.Parse(quantitytxt.Text+"0");
sum = int.Parse(total.Text+"0") + tot;
total.Text = sum.ToString();

试试这段代码。