如果其中一个文本框为空,如何计算文本框的值?

时间:2015-04-03 10:24:52

标签: c# asp.net

我想计算3个文本框的值。如果一个文本框为空,则不必为所有3个文本框提供输入,它应计算剩余的两个文本框。对于我没有给出输入的文本框,我收到此错误“输入字符串格式不正确”。

这是我的代码

 double total = 0;
        if (TextBox1.Text == null)
           TextBox1.Text = "0";
        if (TextBox2.Text== null)
           TextBox2.Text = "0";
        if (TextBox3.Text == null)
           TextBox3.Text = "0";
        total = int.Parse(TextBox1.Text) * 0.10;
        total = total + (int.Parse(TextBox2.Text) * 20);
        total = total + (int.Parse(TextBox2.Text) * 30);
        Lbl.Text = total.ToString();

5 个答案:

答案 0 :(得分:2)

输入为字符串,因此您需要进行验证或尝试下面的代码

        double total = 0;
        total = TryConvert(TextBox1.Text) * 0.10;
        total = total + (TryConvert(TextBox2.Text) * 20);
        total = total + (TryConvert(TextBox2.Text) * 30);
        Lbl.Text = total.ToString();

    public int TryConvert(string s)
    {
        int i = 0;
        int.TryParse(s, out i);
        return i;
    }

答案 1 :(得分:1)

而不是只检查null文本框Text属性可能/可以返回一个空字符串。所以你需要做的是使用string.IsNullOrWhiteSpace()方法。

以下是您更改使用的代码:

double total = 0;
        if (string.IsNullOrWhiteSpace(TextBox1.Text))
           TextBox1.Text = "0";
        if (string.IsNullOrWhiteSpace(TextBox2.Text))
           TextBox2.Text = "0";
        if (string.IsNullOrWhiteSpace(TextBox3.Text))
           TextBox3.Text = "0";
        total = int.Parse(TextBox1.Text) * 0.10;
        total = total + (int.Parse(TextBox2.Text) * 20);
        total = total + (int.Parse(TextBox2.Text) * 30);
        Lbl.Text = total.ToString();

但该代码仍然存在漏洞。如果用户输入无法转换为int的字符串,该怎么办?为了解决这个问题,你需要做这样的事情:

public static double CalcTotal() {
        double total = 0;
        var ints = ToInts(textBox1.Text, textBox2.Text, textBox3.Text);
        var coef = new[] { 0.10d, 20, 30 };
        for (int i = 0; i < ints.Length && i < coef.Length; i++) {
            total += ints[i] * coef[i];
        }
        return total;
    }

    public static int[] ToInts(params string[] args) {
        var res = new int[args.Length];
        int i = 0;
        foreach (var s in args) {
            int num = 0;
            int.TryParse(s, NumberStyles.None, CultureInfo.InvariantCulture, out num);
            res[i++] = num;
        }
        return res;
    }

答案 2 :(得分:0)

您应该检查文本是否为空(除了检查空值)。

例如,

string.IsNullOrEmpty(Textbox1.Text)

您可以在转换值时使用TryParse。

例如,

int textBox1Value = 0; 
int.TryParse(text, out textBox1Value);

答案 3 :(得分:0)

顺便说一句,你还有两次TextBox2.Text,我认为你的意思是TextBox3.Text!由于您计算的是双倍,因此您可以考虑使用double.Parse代替int.Parse

答案 4 :(得分:0)

尝试:

if (TextBox3.Text == null||TextBox3.Text == "")
           TextBox3.Text = "0";

文本框始终为“”而不是null。