2016-04-25 8 views
0

So habe ich mehrere verschiedene Radio-Buttons, in verschiedenen Gruppenfeldern. Bevor der Benutzer sein Formular "speichern" kann, müssen alle Felder ausgefüllt werden. Also versuche ich sicherzustellen, dass alle Radiobuttons ausgefüllt sind. Im Moment versuche ich, den folgenden Code zu verwenden:Radio Button Validation in 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; 
      } 

mit diesem Code es mir nicht erlaubt, auf die Schaltfläche Speichern klicken, aber keine Nachrichtenfelder kommen. Und selbst nachdem ich die Radioboxen ausgefüllt habe, kann ich nicht auf den Speichern-Knopf klicken. Jede Hilfe wäre willkommen.

Antwort

0

Ihre Logik scheint korrekt, aber es wird immer in der letzten Zeile zurückgeben. Vielleicht ist das, was Sie brauchen, so etwas;

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

Wenn Sie bestätigen, dass KEINE Auswahl getroffen wurde, müssen Sie & & nicht || verwenden.

Wenn keine Option ausgewählt wurde, müssen Sie sicherstellen, dass kein Optionsfeld ausgewählt wurde. Mit einem OR, wenn die erste logische Prüfung die Bedingung erfüllt, wird die zweite nicht geprüft. Wenn in Ihrem Fall kein anderer Radiobutton mit der Angabe N/A oder etwas vorhanden ist, werden Ihre inneren Aussagen immer True sein, da mindestens ein Optionsfeld nicht überprüft wird, wenn an seiner Stelle ein anderes Optionsfeld ausgewählt ist.

0

Ich vermute, es ist Top-Level-if Zustand verursacht das Problem, andere Bedingungen werden nicht als Top-Level-Bedingung true in Ihrem Test ausgewertet werden können.

Wahrscheinlich, was Sie brauchen, ist ...

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; 

Auf der anderen Note, da Sie groupbox zum Gruppieren Sie einfach Linq verwenden könnte eine Gruppe zu bewerten.

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"); 
    ... 
}