2013-08-31 42 views
12

我有這些groupboxes:如何從組框中選中哪個單選按鈕?

Enter image description here

我想根據就像一個單選按鈕的檢查真實狀態運行一些代碼:

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

是否有任何直接的方式,使我只能獲取選中的單選按鈕的名稱?

+0

謝謝你提出這個問題。因此,我們現在受益:) – bonCodigo

+0

@bonCodigo謝謝 –

+0

可能重複[該組中的哪個單選按鈕被選中?](http://stackoverflow.com/questions/1797907/which-radio-button-in-the-group-被檢查) –

回答

24

你可以找到所有選中的單選按鈕像

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

而且看看CheckedChanged事件。

當Checked屬性的值更改時發生。

+1

這不能得到任何更好的;)乾杯! – bonCodigo

+0

@Soner我嘗試使用這段代碼,但它提供了'Forms.RadioButton'和'Controls.RadioButton'之間的模糊性錯誤,它是什麼意思? –

+0

@CésarAmorim「System.Windows.Controls」和「System.Windows.Forms」都有'RadioButton'類。我覺得,在你的項目中,這兩個名稱空間都會被添加,編譯器會在你輸入名稱空間時混淆這個名字空間所屬的「RadioButton」。作爲一種解決方案,您可以使用它的全名來防止出現像「System.Windows.Controls.RadioButton」或「System.Windows.Forms.RadioButton」這樣的情況。 –

3

您應該看一下CheckedChanged事件以註冊相應的事件處理程序,並將Checked單選按鈕狀態存儲在某個變量中。不過,我想在這裏使用LINQ只是因爲你有隻是一些RadioButtons這使得循環可接受的成本:

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

在我看來,如果您使用RadioGroup而不是GroupBox會更好。如果你使用radioGroup中,你總能很容易地找到所選擇的項目是這樣的:

radioGroup.selectedIndex; 

如果設計使用Windows窗體,我建議實行這樣的RadioGroup中的行爲(請注意,我的代碼是在Java中):

for (Component comp:groupBox1.components) { 
    if (((RadioButton)comp).selected) 
     return ((RadioButton)comp).value; 
} 

您可以將此代碼塊放在方法中以返回所選的radioButton值,然後您可以在SWITCH部分中使用此值。

+1

我使用Windows窗體,並沒有收音機組的選項 –

+0

請告訴我如何使用它 –

+0

@ Co.Aden我已經更新我的答案,請檢查 –

相關問題