0

我想计算 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

4 回答 4

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);
于 2014-07-09T06:30:18.640 回答
0

尝试一个技巧

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

    textBox6.Text == "" ? 0 : Convert.ToInt32(textBox6.Text)
    
于 2014-07-09T06:27:13.560 回答
0

使用 Int.Tryparse(),当你想从文本框中获取 Integer。它必须是这样的,

string text = "x";
    int num1;
    bool res = int.TryParse(text, out num1);
    if (res == false)
    {
        // String is not a number.
    }
于 2014-07-09T06:33:20.317 回答
0

我想补充几点

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

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

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

    String abc=textbox1.Text.trim();

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

于 2014-07-09T06:43:24.387 回答