2016-04-25 7 views
0

Итак, у меня есть несколько разных переключателей в разных групповых ящиках. Прежде чем пользователь сможет «сохранить» свою форму, все поля должны быть заполнены. Поэтому я стараюсь, чтобы все радиокнопки были заполнены. В настоящий момент я пытаюсь использовать следующий код:Проверка радио кнопки в WinForms

if (!(this.RoundTrip.Checked || this.OneWay.Checked)) 
      { 
       MessageBox.Show("Select an option for Trip Type"); 


       if (!(this.NorthRad.Checked || this.ExpressRad.Checked || this.ExpressRad.Checked)) 
       { 
        MessageBox.Show("Select an Option for Route Type"); 

       } 
       if (!(this.YesNeeded.Checked || this.NotNeeded.Checked)) 
       { 
        MessageBox.Show("Select an option for accessibility"); 

       } 
       if (this.AdultNum.Value == 0 && this.SeniorNum.Value == 0 && this.ChildNum.Value == 0) 
       { 
        MessageBox.Show("Select at least one ticket"); 

       } 
       return; 
      } 

с помощью этого кода он не позволяет мне нажимать кнопку сохранения, но никаких сообщений не появляется. И даже после заполнения полей я не могу нажать кнопку «Сохранить». Любая помощь будет оценена по достоинству.

ответ

0

Ваша логика кажется правильной, но она всегда будет возвращаться на последней строке. Возможно, вам нужно что-то подобное;

private void btnSave_Clicked() 
    { 
     if (!IsValidDataEntered()) return; 

     Save(); 
    } 

    private bool IsValidDataEntered() 
    { 
     if (!(this.RoundTrip.Checked || this.OneWay.Checked)) 
      MessageBox.Show("Select an option for Trip Type"); 

     else if (!(this.NorthRad.Checked || this.ExpressRad.Checked || this.ExpressRad.Checked)) 
      MessageBox.Show("Select an Option for Route Type"); 

     else if (!(this.YesNeeded.Checked || this.NotNeeded.Checked)) 
      MessageBox.Show("Select an option for accessibility"); 

     else if (this.AdultNum.Value == 0 && this.SeniorNum.Value == 0 && 
       this.ChildNum.Value == 0) 
      MessageBox.Show("Select at least one ticket"); 

     else 
      return true; 

     return false; 
    } 
0

Если вы подтверждаете, что выбрано НЕТ, вы должны использовать & & not ||.

Если опция не была проверена, вам необходимо убедиться, что ни один из переключателей не выбран. Если OR, если первая логическая проверка удовлетворяет условию, то она не будет проверять вторую. Кроме того, в вашем случае, если нет другого переключателя, который говорит N/A или что-то еще, ваш внутренний оператор всегда будет True, поскольку по крайней мере один переключатель не будет проверен, если на нем будет проверен другой.

0

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

Возможно, что вам нужно ...

if (!(this.RoundTrip.Checked || this.OneWay.Checked)) 
{ 
    MessageBox.Show("Select an option for Trip Type"); 
} 
else if (!(this.NorthRad.Checked || this.ExpressRad.Checked || this.ExpressRad.Checked)) 
{ 
    MessageBox.Show("Select an Option for Route Type"); 

} 
else if (!(this.YesNeeded.Checked || this.NotNeeded.Checked)) 
{ 
    MessageBox.Show("Select an option for accessibility"); 

} 
else if (this.AdultNum.Value == 0 && this.SeniorNum.Value == 0 && this.ChildNum.Value == 0) 
{ 
    MessageBox.Show("Select at least one ticket"); 
} 
return; 

С другой нотой, так как у вас есть groupbox для группировки можно использовать простой Linq оценить группу.

var group1Validation = GroupBox1.Controls 
          .OfType<RadioButton>() 
          .Any(r=>r.Checked); 


var group2Validation = GroupBox2.Controls 
          .OfType<RadioButton>() 
          .Any(r=>r.Checked); 


if(!group1) 
{ 
    MessageBox.Show("Select an option for Trip Type"); 
    ... 
}