2015-04-03 71 views
0

我想计算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(); 
+0

尝试使用'String.IsNullOrEmpty(TextBoxN.Text)'进行空比较。 – 2015-04-03 10:28:19

+0

向我们展示您的输入(文本框值)。 – 2015-04-03 10:31:49

+0

也小心文化设置 – Caramiriel 2015-04-03 10:41:21

回答

1

而不只是检查空文本框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(); 

但是,代码仍然是开放的bug。如果用户输入无法转换为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

输入一个字符串,所以你需要将验证或尝试下面的代码

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

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

例如,

string.IsNullOrEmpty(Textbox1.Text) 

而转换值您可以使用的TryParse。

例如,

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

你还要TextBox2.Text两次顺便说一下,我想你的意思TextBox3.Text!由于您正在计算双倍数,因此您可能会考虑使用double.Parse而不是int.Parse

0

尝试:

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

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

+0

是的..谢谢 – sharanya 2015-04-03 11:56:58

+0

@sharanya从所有其他答案,你会发现这一个是最好的一个:D如果TextBox3.Text ==“aisiktir” – 2015-04-03 12:04:23

+0

这是不是完整的解决方案! – yogi970 2015-04-03 12:05:39

相关问题