2013-08-31 23 views
12

mam te groupboxes:Jak mogę sprawdzić, który przycisk radiowy jest zaznaczony z pola grupowego?

Enter image description here

chcę uruchomić jakiś kod według sprawdzonej prawdziwego stanu przycisku radiowego jak:

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; 
} 

istnieje jakikolwiek bezpośredni sposób, tak, że mogę tylko uzyskać nazwę zaznaczonego przycisku radiowego?

+0

Dziękuję za zadanie pytania. Więc skorzystamy teraz :) – bonCodigo

+0

@bonCodigo Dzięki –

+0

możliwy duplikat [Który przycisk radiowy w grupie jest zaznaczony?] (Http://stackoverflow.com/questions/1797907/which-radio-button-in-the-group- jest sprawdzone) –

Odpowiedz

24

można znaleźć wszystkie sprawdzone radiobuttons jak

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

także przyjrzeć CheckedChanged wydarzenie.

Występuje, gdy zmienia się wartość właściwości Sprawdzane.

+1

To nie może być nic lepszego;) Pozdrawiam! – bonCodigo

+0

@Soner Próbowałem użyć tego kodu, ale zapewnia on błąd niejednoznaczności między "Formami.RadioButton" i "Kontrolkami.RadioButton", co to oznacza? –

+0

@ CésarAmorim Zarówno 'System.Windows.Controls' i' System.Windows.Forms' mają klasę 'RadioButton'. Mam wrażenie, że w twoim projekcie oba te nazwy są dodawane, a kompilator myli, która przestrzeń nazw należy do tego "RadioButton", kiedy wpisujesz tylko swoją nazwę. Jako rozwiązanie możesz użyć jego pełnej nazwy, aby zapobiec tej sytuacji, np. 'System.Windows.Controls.RadioButton' lub' System.Windows.Forms.RadioButton'. –

3

Należy przyjrzeć się zdarzeniu CheckedChanged, aby zarejestrować odpowiednią procedurę obsługi zdarzenia i zapisać stan przycisku radiowego Checked w niektórych zmiennych. Jednak chciałbym skorzystać LINQ tu tylko dlatego, że masz tylko trochę RadioButtons co sprawia, że ​​koszty zapętlenie dopuszczalny:

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

Moim zdaniem, lepiej jest używać RadioGroup zamiast GroupBox. Jeśli używasz radiogroup, zawsze można znaleźć wybraną pozycję łatwo tak:

radioGroup.selectedIndex; 

jeśli zaprojektować przy użyciu Windows Forms, proponuję wdrożyć zachowanie radiogroup tak (proszę zauważyć, że mój kod w Javie):

Możesz umieścić ten blok kodu w metodzie, aby zwrócić wybraną wartość radioButton, a następnie możesz użyć tej wartości w części SWITCH.

+1

Używam formularzy systemu Windows i nie ma opcji grupy radiowej –

+0

pls powiedz mi, jak z niego korzystać –

+0

@ Co.Aden Zaktualizowałem swoją odpowiedź, proszę sprawdzić –