2013-08-31 2 views
12

Ich habe diese Gruppenfelder:Wie erhalte ich, welches Optionsfeld aus einer Groupbox ausgewählt wird?

Enter image description here

Ich möchte einige Code auszuführen nach geprüft wahren Zustand eines Optionsfeld wie:

string chk = radiobutton.nme; // Name of radio button whose checked is true 
switch(chk) 
{ 
    case "Option1": 
     // Some code 
     break; 

    case "Option2": 
     // Some code 
     break; 

    case "Option3": 
     // Some code 
     break; 
} 

Gibt es eine direkte Art und Weise, so dass ich kann nur Den Namen des aktivierten Optionsfelds erhalten?

+0

Vielen Dank für die Frage. So profitieren wir jetzt :) – bonCodigo

+0

@bonCodigo Danke –

+0

mögliche Duplikate von [Welche Optionsschalter in der Gruppe ist überprüft?] (Http://StackOverflow.com/Questions/1797907/which-radio-Button-in-the-group- is-checked) –

Antwort

24

Sie können alle markierten finden Radiobuttons wie

var buttons = this.Controls.OfType<RadioButton>() 
          .FirstOrDefault(n => n.Checked); 

Werfen Sie auch einen Blick auf CheckedChanged Ereignis.

Tritt ein, wenn der Wert der Checked-Eigenschaft ändert.

+1

Das kann nicht besser werden;) Prost! – bonCodigo

+0

@Soner Ich habe versucht, diesen Code zu verwenden, aber es bietet einen Fehler der Ambiguität zwischen'Forms.RadioButton'und'Controls.RadioButton', was bedeutet es? –

+0

@ CésarAmorim Sowohl "System.Windows.Controls" als auch "System.Windows.Forms" haben die 'RadioButton' Klasse. Ich habe das Gefühl, dass in Ihrem Projekt beide Namenspaces hinzugefügt werden und der Compiler verwirrt, welcher Namespace zu diesem 'RadioButton' gehört, wenn Sie nur seinen Namen eingeben. Als Lösung können Sie den vollständigen Namen verwenden, um diese Situation wie 'System.Windows.Controls.RadioButton' oder' System.Windows.Forms.RadioButton' zu verhindern. –

3

Sie sollten sich das Ereignis CheckedChanged ansehen, um den entsprechenden Ereignishandler zu registrieren und den Optionsfeldstatus Checked in einer Variablen zu speichern. Ich möchte jedoch LINQ hier verwenden, nur weil man gerade etwas RadioButtons haben, die die Kosten für die Looping akzeptabel macht:

var checkedRadio = new []{groupBox1, groupBox2} 
        .SelectMany(g=>g.Controls.OfType<RadioButton>() 
              .Where(r=>r.Checked)) 
// Print name 
foreach(var c in checkedRadio) 
    System.Diagnostics.Debug.Print(c.Name); 
-1

Meiner Meinung nach ist es besser, wenn Sie RadioGroup anstelle von GroupBox verwenden. Wenn Sie radiogroup verwenden, können Sie immer das ausgewählte Element leicht finden wie folgt aus:

radioGroup.selectedIndex; 

Wenn Sie Windows Forms-Design, schlage ich vor, Radiogroup Verhalten wie folgt (bitte beachten Sie, dass mein Code in Java) zu implementieren:

Sie können diesen Codeblock in eine Methode einfügen, um den ausgewählten RadioButton-Wert zurückzugeben, und dann können Sie diesen Wert in Ihrem SWITCH-Teil verwenden.

+1

Ich verwende Windows-Formulare und es gibt keine Option der Radio-Gruppe –

+0

Bitte sagen Sie mir, wie man es verwendet –

+0

@ Co.Aden Ich habe meine Antwort aktualisieren, überprüfen Sie bitte –