2016-03-04 3 views
0

У меня есть текстовое поле tb_weight, который является входом для расчета и я сделал код с MessageBox, которое появится, если текстовое поле пусто при нажатии на кнопку Calculate:Стоп-код, если текстовое поле пусто

if (string.IsNullOrEmpty(this.tb_weight.Text)) 
{ 
    MessageBox.Show("Textbox is empty"); 
} 

У меня есть переключатели, соответствующие числу, которое будет умножено на значение, указанное в текстовом поле. Ниже приведен код для одной из кнопок:

if (rb_wcf1.IsChecked == true) 
{     
    int a = Int32.Parse(tb_weight.Text); 
    b = (a * 1.03)/1000; 
    lbl_wll.Content = Math.Round(b, 2); 
} 

Так что, если ни один из переключателей не выбран, и нет никакого текста в текстовом поле, моя MessageBox выскочит. Если я оставлю текстовое поле пустым и проверит радиокнопку rb_wcf1 и нажмите кнопку расчета, программа завершит работу после закрытия окна сообщений. Я довольно новичок в программировании, и я не уверен, как лучше разработать этот код. Если текстовое поле пуст, а радиокнопки отмечены, я не хочу, чтобы код в переключателях запускался. Может кто-нибудь, пожалуйста, дать мне несколько советов или рекомендаций?

+0

Если весь код находится в событии щелчка кнопки калькулятора, то просто возвращайтесь после отображения окна сообщения. Если код находится в отдельных событиях - просто проверьте пустую строку, как вы делали выше. – PaulF

ответ

1

У вас уже есть условие, чтобы проверить, если текстовое поле пустое:

if (string.IsNullOrEmpty(this.tb_weight.Text)) 

Просто используйте, что:

if (!string.IsNullOrEmpty(this.tb_weight.Text)) 
{ 
    if (rb_wcf1.IsChecked == true) 
    { 
     // perform your calculations 
    } 
} 

Или инвертировать условный, чтобы выйти из метода как своего рода пункт охраны :

if (!string.IsNullOrEmpty(this.tb_weight.Text)) 
{ 
    // show message 
    return; 
} 

if (rb_wcf1.IsChecked == true) 
{ 
    // perform your calculations 
} 
// etc. 

Существует множество способов структурирования вашей логики, и что было бы лучше всего сочетание личных предпочтений и того, как ваш код в настоящее время структурирован (что мы не можем видеть из этих фрагментов). Но в целом то, что вы хотите сделать, это просто проверить, пусто ли текстовое поле, которое вы уже делаете.


Side Примечания: Int32.Parse() может бросить исключение, если вход не может быть разобран на целое число. Вы можете попробовать это вместо:

int a; 
if (!Int32.TryParse(tb_weight.Text, out a)) 
{ 
    // show an error 
    return; 
} 
// continue with your logic 

Таким образом, если входной сигнал не может быть проанализирован в целое число, то сообщение об ошибке дружеского будет показаны вместо исключения.

+0

Спасибо за помощь, это очень помогло! –

0

Вы можете проверить наличие нескольких ресурсов в if заявлении, но убедитесь, что вы отрицать метод IsNullOrEmpty

if (rb_wcf1.IsChecked == true && !string.IsNullOrEmpty(this.tb_weight.Text)) 
    {     
     int a = Int32.Parse(tb_weight.Text); 
     b = (a * 1.03)/1000; 
     lbl_wll.Content = Math.Round(b, 2); 
    } 

Вы можете использовать IsNullOrWhitespace, а также, он также отфильтровывает строку только с пробелами, то есть: «» не пусто, имеет пробелы

+1

Да, это работает! Спасибо, мой мозг сегодня не работает правильно! –

+0

Я тоже думал об этом, но я сильно подозреваю, что условие «если» для переключателя является частью большей серии условий if if else. Поэтому я не хотел бы повторять ту же самую ошибку null/empty снова и снова. – David

+1

Если это сработало для вас, подумайте о принятии ответа. В этом случае @maarten получит несколько очков. – Mand