2015-04-03 3 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)' для нулевого сравнения. –

+0

Покажите нам свои входы (значения TextBox). –

+0

Также будьте осторожны с настройками культуры – Caramiriel

ответ

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(); 

Но этот код остается открытым для ошибок. Что делать, если пользователь вводит строку, которая не может быть преобразована в 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"; 

Textboxes всегда "", а не нулевой.

+0

Да .. Спасибо – sharanya

+0

@sharanya из всех других ответов вы найдете этот, чтобы быть лучшим: D Что произойдет, если TextBox3.Text == "aisiktir" –

+0

Это еще не все! – yogi970

Смежные вопросы