2016-04-21 3 views
1

Ich möchte einen Index eines ausgewählten RadioButton in RadioGroup finden. Ich angebracht nächste einzelne Methode zu jeder RadioButton- in der Gruppe:Erhalte den Index eines ausgewählten RadioButtons in radioGroup

private void radio_button_CheckedChanged(object sender, EventArgs e){ 
    if (sender.GetType() != typeof(RadioButton)) return; 
    if (((RadioButton)sender).Checked){ 
     int ndx = my_radio_group.Controls.IndexOf((Control)sender); 
     // change something based on the ndx 
    } 
} 

Es ist mir wichtig, dass niedrigerer radiobutton muss niedrigen Index, beginnend bei Null. Und es scheint zu funktionieren, aber ich bin mir nicht sicher, ob das eine gute Lösung ist. Vielleicht gibt es mehr betufilul Weg, um das Gleiche zu tun.

private void radioButtons_CheckedChanged(object sender, EventArgs e) 
{ 
    RadioButton rb = sender as RadioButton; 
    if (rb.Checked) 
    { 
     Console.WriteLine(rb.Text); 
    } 
} 

von Indizes in der Controls-Auflistung seiner Parent sind hoch flüchtigen:

+0

so etwas http://stackoverflow.com/questions/17082551/getting-the-index-of-the-selected-radiobutton-in-a-group –

+0

Was bist du? Quelle: Winforms, WPF, ASP ..? __Always__ kennzeichnen Sie Ihre Frage korrekt. – TaW

+0

Ich habe es immer vorgezogen, die "value" -Eigenschaft des Radioknopfs zu verwenden, anstatt ihren Index in der Gruppe. Auf diese Weise können Sie die Reihenfolge ändern, neue Elemente einfügen und müssen den Code nicht nachträglich ändern (außer, um mit der Logik der neuen Optionen umzugehen). –

Antwort

2

Sie die CheckedRadioButton Dies gibt.

Man könnte es so zugreifen: rb.Parent.Controls.IndexOf(rb) Wenn Sie neben dem Name eine relativ stabil ID wollen und die Text können Sie es in der Tag setzen.

Offensichtlich müssen Sie dieses Ereignis an alle die RadionButtons in der Gruppe anschließen.

Es sind keine Typprüfungen notwendig (oder imo empfohlen), da nur ein RadioButton (oder besser: muss jemals) dieses Ereignis auslösen kann.

+0

danke, es funktioniert gut für mich. Verwendetes Etikett zum Speichern des gewünschten Werts –

1

Um den Index ideal zu erhalten, möchten Sie die Steuerelemente als Sammlung angeordnet haben. Wenn Sie Steuerelemente von Code hinzufügen hinter als das so einfach ist wie

List<RadionButton> _buttons = new List<RadioButton>(); 

_buttons.Add(new RadioButton() { ... });  
_buttons.Add(new RadioButton() { ... });  
... 

Wenn Sie verwenden möchten Formular entworfen, dann vielleicht in Form Konstruktor diese Liste schaffen, ist eine Alternative:

List<RadioButtons> _list = new List<RadioButton>(); 

public Form1() 
{ 
    InitializeComponent(); 
    _list.Add(radioButton1); 
    _list.Add(radioButton2); 
    ... 
} 

Danach wird der aktuelle Aufgabe Index zu erhalten, ist so einfach wie:

void radioButton_CheckedChanged(object sender, EventArgs e) 
{ 
    var index = _list.IndexOf(sender); 
    ... 
} 
+0

Haben Sie die erste Zeile von Barrys Link gesehen? ; -) – TaW

+0

@ Barrys Kommentar? wpf eins? – Sinatr

+0

danke, das ist hilfreich, vielleicht werde ich es ein wenig später verwenden –