2017-03-07 29 views
0

Ich versuche, eine Switch Case-Anweisung zu entwickeln, die es mir ermöglicht, Code basierend auf den 3 ausgewählten Optionsfeldern auszuführen. Ich habe eine Nachricht Box Erklärung mir zu sagen, ob dies erfolgreich war, aber es zeigt nie so bin ich sicher, ich bin etwas falsch zu machenSwitch Case mit Optionsschalter - C#

Jede Beratung

public void button2_Click(object sender, EventArgs e) 
    { 

     RadioButton radioBtn = new RadioButton(); 
     if (radioBtn.Enabled == true) 
     { 
      switch (radioBtn.Name) 
      { 
       case "radioButton1": 
        ComicBooks CB = new ComicBooks(); 
        CB.setTitle(textBox1.Text); 
        MessageBox.Show(CB.Title); 
        break; 

       case "radioButton2": 
        //do something 
        break; 

       case "radioButton3": 
        //do something 
        break; 

      } 

     } 
+2

'RadioButton- radioBtn = (RadioButton-) sender;' –

+4

Sie erstellen einen neuen 'RadioButton' ohne Namen, so tut es natürlich nichts – Pikoh

+1

Nein @JohnnyMopp. Dies scheint ein Button-Click-Ereignis zu sein, so dass Sie nicht in der Lage sein werden, den Sender an RadioButton zu senden. – Pikoh

Antwort

1

Das Problem mit Ihrem Code wäre toll ist, dass man hier eine neue Instanz von RadioButton schaffen:

RadioButton radioBtn = new RadioButton(); 

Dieses Beispiel ist nicht mit irgendetwas in Ihrem UI und hat keine Name Eigenschaft gefasste, so dass es keinen übereinstimmt switch Fall.

Wenn Sie überprüfen wollen, was RadioButton ausgewählt wird, wenn Sie auf eine Schaltfläche klicken, und etwas tun, seinen Namen abhängig, können Sie dies tun:

RadioButton radioBtn = this.Controls.OfType<RadioButton>() 
             .Where(x=>x.Checked).FirstOrDefault(); 
if (radioBtn!=null) 
{ 
    switch (radioBtn.Name) 
    { 
     case "radioButton1": 
      //Your switch structure here ... 

} 

Wenn die RadioButtons nicht in der Form selbst sind, sondern beispielsweise in einem Gremium, müssen Sie die erste Zeile meines Codes für das ändern:

this.panel1.Controls
RadioButton radioBtn = this.panel1.Controls.OfType<RadioButton>() 
              .Where(x=>x.Checked).FirstOrDefault(); 

Hinweis Teil

+0

'var name = this.panel1.Controls.OfType () .FirstOrDefault (x => x.Checked) ?. Name;' wäre idiomatischer. –

1

In dieser Zeile erstellen Sie ein brandneues RadioButton-Objekt und erstellen einen Verweis darauf mit dem Namen radioBtn.

RadioButton radioBtn = new RadioButton(); 

Also, in Ihrer Switch-Anweisung, keine Ihrer Blöcke werden eingegeben, weil radioBtn.Name null sein wird, oder ein Standardwert von .NET Framework zugeordnet.

Anstatt einen neuen RadioButton zu erstellen, möchten Sie wahrscheinlich die Werte vorhandener RadioButtons überprüfen, die Sie über den grafischen Designer von Visual Studio hinzugefügt haben. So würde der Code etwas wie folgt aussehen (mit erfundenen Namen, denn ich weiß nicht, was Sie mit der eigentlichen Radiobuttons im Designer genannt):

public void button2_Click(object sender, EventArgs e) 
{ 
    if (radioButton1.Checked) 
    { 
    ComicBooks CB = new ComicBooks(); 
    CB.setTitle(textBox1.Text); 
    MessageBox.Show(CB.Title); 
    } 
    else if (radioButton2.Checked) 
    { 
    // do something 
    } 
    else if (radioButton3.Checked) 
    { 
    // do something 
    } 
} 
+0

Danke für das Beispiel. Mir wurde gesagt, dass eine switch case-Anweisung dafür besser wäre als if-Anweisungen. Sieht so aus, als könntest du in beide Richtungen gehen. – Justin

+0

@Justin switch ist auch in Ordnung, aber die Logik in dieser Antwort gilt für alle Kontrollstrukturen, die du verwendest. –

+0

@ AluanHaddad, danke für die Info! – Justin