我正在创建一个小程序,但它会引发错误。
System.Format.Exception
我添加了最后一行后很好:
- 如果用户未输入任何价格,则会显示MessageBox错误。
private void button2_Click(object sender, EventArgs e)
{
float mont,ope,mont_ht;
mont = float.Parse(text_entrer.Text); // ERROR HERE : 'System.Format.Exception'
if (radioButton4.Checked)
{
text_resultat.Text = mont.ToString();
}
else if(radioButton5.Checked && radioButton1.Checked)
{
ope = mont * 20 / 100;
mont_ht = mont + ope;
text_resultat.Text = mont_ht.ToString();
}
else if (radioButton5.Checked && radioButton2.Checked)
{
ope = mont * 12 / 100;
mont_ht = mont + ope;
text_resultat.Text = mont_ht.ToString();
}
else if (radioButton5.Checked && radioButton3.Checked)
{
ope = mont * 5 / 100;
mont_ht = mont + ope;
text_resultat.Text = mont_ht.ToString();
}
if (String.IsNullOrEmpty(text_entrer.Text))
{
MessageBox.Show("no montant","EROR", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}
这是一个包含错误和调试值的屏幕截图:
答案 0 :(得分:0)
显然,text_entrer.Text
中的空字符串(即"用户不输入任何价格")不是有效数值,应在之前检查 em>尝试任何转换(即float.Parse
之前)。因此,如果检查失败,请将值检查移至方法的开头并退出方法:
private void button2_Click(object sender, EventArgs e)
{
if (String.IsNullOrEmpty(text_entrer.Text))
{
MessageBox.Show("no montant","EROR", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
float mont,ope,mont_ht;
mont = float.Parse(text_entrer.Text); //I HAVE THE PROBLEM HERE
//..............
}
此外,使用float.TryParse
,您可以更好地保护任何无效的非数字输入:
if (!float.TryParse(text_entrer.Text, out mont))
{
MessageBox.Show("Montant invalide","EROR", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
答案 1 :(得分:0)
异常的直接原因是text_entrer.Text
包含无法解析为float
的字符串(例如bla-bla-bla
- 不是有效的浮点值)。我建议使用TryParse
代替Parse
:
using System.Globalization;
...
float mont,ope,mont_ht;
if (!float.TryParse(text_entrer.Text,
NumberStyles.Any,
CultureInfo.InvariantCulture, // or CultureInfo.CurrentCulture
out mont) {
if (text_entrer.CanFocus)
text_entrer.Focus();
MessageBox.Show($"{text_entrer.Text} is not a valid floating point value",
Application.ProductName,
MessageBoxButtons.OK,
MessageBoxIcon.Warning);
return;
}
...
if (radioButton4.Checked)
...