以下是代码:
public void calculations()
{
int value;
try
{
if ((string.IsNullOrEmpty(txtrate.Text)) || (string.IsNullOrEmpty(txttotalkm.Text)))
{
MessageBox.Show("Fill both the Values", "Try Again", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else if ((int.TryParse(txtrate.Text, out value)) && (int.TryParse(txttotalkm.Text, out value)))
{
int rate = int.Parse(txtrate.Text.Trim());
int km = int.Parse(txttotalkm.Text.Trim());
decimal gross = rate * km;
decimal NBT = (gross * 8 / 100);
decimal vat = ((gross + NBT) * 11 / 100);
decimal total = vat + NBT + gross;
string snbt = String.Format("{0:Rs 0.00}", NBT);
string svat = String.Format("{0:Rs 0.00}", vat);
string stotal = String.Format("{0:Rs 0.00}", total);
lblnbt.Visible = true;
lblnbt.Text = snbt;
lblvat.Visible = true;
lblvat.Text = svat;
lbltotal.Visible = true;
lbltotal.Text = stotal;
string ltnbt = lblnbt.Text.ToString();
string ltvat = lblvat.Text.ToString();
string lttotal = lbltotal.Text.ToString();
int inbt = Convert.ToInt32(lblnbt.Text);
int ivat = Convert.ToInt32(lblvat.Text);
int itotal = Convert.ToInt32(lbltotal.Text);
//CreateWordDocument(@"C:\temp\test.docx",
// @"C:\temp\new.docx");
clear();
}
else
{
MessageBox.Show("Wrong Values Please Check again", "Try Again", MessageBoxButtons.OK, MessageBoxIcon.Information);
clear();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
运行程序时,它说:
输入字符串格式错误
我必须说我只是在尝试编码和学习,而不是专业人士,我只是无法找到问题。
尝试删除try...catch
框并查看其说明的例外情况:
如果有更简单的方法,请告诉我。
答案 0 :(得分:1)
错误在于:
//snbt, svat and stotal are not valid integers, because they
//are text formatted that start with "Rs"...
string snbt = String.Format("{0:Rs 0.00}", NBT);
string svat = String.Format("{0:Rs 0.00}", vat);
string stotal = String.Format("{0:Rs 0.00}", total);
lblnbt.Visible = true;
lblnbt.Text = snbt;
lblvat.Visible = true;
lblvat.Text = svat;
lbltotal.Visible = true;
lbltotal.Text = stotal;
string ltnbt = lblnbt.Text.ToString();
string ltvat = lblvat.Text.ToString();
string lttotal = lbltotal.Text.ToString();
//HERE the exception is triggered, because the "text" in the
//Labels start with "Rs".
int inbt = Convert.ToInt32(lblnbt.Text);
int ivat = Convert.ToInt32(lblvat.Text);
int itotal = Convert.ToInt32(lbltotal.Text);
要更正此问题,为什么不简单地使用NBT,VAT和TOTAL,而不是将AGAIN从标签转换为整数?
或者更好的是,为什么你需要从标签中重新转换为整数?
答案 1 :(得分:0)
解析应该始终将错误的格式输入保持为异常引发原因。对于C#中的相同,有明确的解决方案,如。
•如果您有一个字符串,并且您希望它始终是一个整数(例如,如果某个Web服务以字符串格式递给您一个整数),则您使用{{1} }。
•如果您正在收集用户的输入,您通常会使用Int32.Parse()
,因为它允许您在用户输入无效输入时对情况进行更精细的控制。
•Int32.TryParse()
将一个对象作为其参数,我相信当它发现作为参数的对象是一个字符串时会调用Convert.ToInt32()
答案 2 :(得分:0)
如果您只允许TextBox中的数字值" txtrate"和" txttotalkm",您可以使用" NumericUpDown"控制。它只允许数字输入,因此不需要使用解析方法。