我想计算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 :(得分: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。