输入字符串的格式不正确:未处理的异常

时间:2014-07-09 06:23:55

标签: c# formatexception

我想在1个文本框中计算五个文本框的总和.... 但是当我从五个文本框中保留一个文本框时,它就会出错 输入字符串的格式不正确  下面是我的代码

        if (textBox6.Text.Length == 0)

        // textBox12.Text = (Convert.ToInt32(textBox5.Text) - Convert.ToInt32(textBox11.Text)).ToString();
        {
            textBox11.Text = (Convert.ToInt32(textBox7.Text) + Convert.ToInt32(textBox8.Text) + Convert.ToInt32(textBox9.Text) + Convert.ToInt32(textBox10.Text)).ToString();
            textBox12.Text = (Convert.ToInt32(textBox5.Text) - Convert.ToInt32(textBox11.Text)).ToString();
        }
        else if (textBox7.Text.Length == 0)
        {
            //textBox11.Text = (Convert.ToInt32(textBox6.Text) + Convert.ToInt32(textBox7.Text) + Convert.ToInt32(textBox8.Text) + Convert.ToInt32(textBox9.Text) + Convert.ToInt32(textBox10.Text)).ToString();
            textBox11.Text = (Convert.ToInt32(textBox6.Text) + Convert.ToInt32(textBox8.Text) + Convert.ToInt32(textBox9.Text) + Convert.ToInt32(textBox10.Text)).ToString();
            textBox12.Text = (Convert.ToInt32(textBox5.Text) - Convert.ToInt32(textBox11.Text)).ToString();
        }
        else if (textBox8.Text.Length == 0)
        {
            //textBox11.Text = (Convert.ToInt32(textBox6.Text) + Convert.ToInt32(textBox7.Text) + Convert.ToInt32(textBox8.Text) + Convert.ToInt32(textBox9.Text) + Convert.ToInt32(textBox10.Text)).ToString();
            textBox11.Text = (Convert.ToInt32(textBox6.Text) + Convert.ToInt32(textBox7.Text) + Convert.ToInt32(textBox9.Text) + Convert.ToInt32(textBox10.Text)).ToString();
            textBox12.Text = (Convert.ToInt32(textBox5.Text) - Convert.ToInt32(textBox11.Text)).ToString();
        }
        else if (textBox9.Text.Length == 0)
        {
            //textBox11.Text = (Convert.ToInt32(textBox6.Text) + Convert.ToInt32(textBox7.Text) + Convert.ToInt32(textBox8.Text) + Convert.ToInt32(textBox9.Text) + Convert.ToInt32(textBox10.Text)).ToString();
            textBox11.Text = (Convert.ToInt32(textBox6.Text) + Convert.ToInt32(textBox7.Text) + Convert.ToInt32(textBox8.Text) + Convert.ToInt32(textBox10.Text)).ToString();
            textBox12.Text = (Convert.ToInt32(textBox5.Text) - Convert.ToInt32(textBox11.Text)).ToString();
        }
        else if (textBox10.Text.Length == 0)
        {
            //textBox11.Text = (Convert.ToInt32(textBox6.Text) + Convert.ToInt32(textBox7.Text) + Convert.ToInt32(textBox8.Text) + Convert.ToInt32(textBox9.Text) + Convert.ToInt32(textBox10.Text)).ToString();
            textBox11.Text = (Convert.ToInt32(textBox6.Text) + Convert.ToInt32(textBox7.Text) + Convert.ToInt32(textBox8.Text) + Convert.ToInt32(textBox9.Text)).ToString();
            textBox12.Text = (Convert.ToInt32(textBox5.Text) - Convert.ToInt32(textBox11.Text)).ToString();

        }
        else
            textBox11.Text = (Convert.ToInt32(textBox6.Text) + Convert.ToInt32(textBox7.Text) + Convert.ToInt32(textBox8.Text) + Convert.ToInt32(textBox9.Text) + Convert.ToInt32(textBox10.Text)).ToString();
            textBox12.Text = (Convert.ToInt32(textBox5.Text) - Convert.ToInt32(textBox11.Text)).ToString();



       // (Convert.ToInt32(textBox6.Text) +
    }

4 个答案:

答案 0 :(得分:5)

你的代码会变得非常混乱......我建议你重构..

List<string> texts = new List<string>{textbox1.Text, textbox2.Text};

int sum = 0;
foreach(string t in texts)
{
    int parse = 0;
    if(!int.TryParse(t, out parse))
        //Not a valid number
    sum += parse;   
}
textbox11.Text = sum.ToString();

如果您希望告诉用户哪个文本框为空,您可以将其修改为文本框列表


如果要添加页面上的每个文本框,只需用

替换列表即可
var texts = this.Controls.OfType<TextBox>().Select(tb => tb.Text);

答案 1 :(得分:0)

尝试一个技巧

  • 首先检查文本框是否有值,如果没有,则将其替换为“0”,如下所示

    textBox6.Text == "" ? 0 : Convert.ToInt32(textBox6.Text)
    

答案 2 :(得分:0)

当你想从textbox获取Integer时,使用Int.Tryparse()。它必须是这样的,

string text = "x";
    int num1;
    bool res = int.TryParse(text, out num1);
    if (res == false)
    {
        // String is not a number.
    }

答案 3 :(得分:0)

我想补充一些要点

1)在编程实践中使用String.IsNullorEmpty(textBox1.Text),虽然使用长度并不是一个坏主意。

2)仅允许使用属性在文本框中使用数字字符。

3)在解析之前使用trim方法修复字符串。

    String abc=textbox1.Text.trim();

4)调试时不要比较文本框中的字符串,使用长度进行比较。