我的代码中有一个关于" System.Format.Exception"的错误

时间:2017-04-26 12:31:33

标签: c# forms winforms

我正在创建一个小程序,但它会引发错误。

  

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);     
    }
}

这是一个包含错误和调试值的屏幕截图:

enter link description here

2 个答案:

答案 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) 
     ...