2013-02-07 60 views
1

我有這部分代碼(在按鈕的單擊事件)如何知道檢查哪個單選按鈕?

  foreach (RadioButton rb in grbFiltro.Controls.OfType<RadioButton>()) 
     { 
      if (((RadioButton)rb).Checked) 
      { 
       switch (true) 
       { 
        case rbt1.Checked: 
         //do something 
         break; 
        case rbt2.Checked: 
         //do something 
         break; 
        case rbt3.Checked: 
         //do something 
         break; 
       } 
      } 
     } 

但看到一隻錯誤--->的情況下轉換到單選框串rbt1.Checked

我如何解決這個問題,或者我可以使用什麼?

+1

爲什麼使用開關盒而不是其他? –

+0

可能的重複http://stackoverflow.com/questions/1797907/which-radio-button-in-the-group-is-checked – Surfbutler

+0

我有超過3個單選按鈕這個例子!我的真實代碼,我更喜歡開關 –

回答

1
var rb = grbFiltro.Controls.OfType<RadioButton>() 
      .SingleOrDefault(rb => rb.Checked.GetValueOrDefault()) as RadioButton; 

if (rb!=null) 
    switch (rb.Name) 
      { 
       case "button1": 
        //do something 
        break; 
       case "button2": 
        //do something 
        break; 
       case "button3": 
        //do something 
        break; 
      } 
+0

更改部分代碼: –

1

你有25個按鈕,所以如果您需要做的事情與每個按鈕不同,那麼你將有一個的if/else鏈,它的基礎上你,我可能會做一些像

IEnumerable<RadioButton> buttons = grbFiltro.Controls.OfType<RadioButton>()) ; 
    foreach (var Button in buttons) 
    { 
     if (Button.Checked) 
     { 
      //Do Something 
     } 
    } 

需要。但我猜你將會儲存選定的價值,並用這個價值做一些事情。

+0

我有超過3個單選按鈕! 25正確 –

+0

我是基於它在你的上述帖子,如果你有很多按鈕,我可能會測試他們在列表中給我一秒,我會給你一些代碼 – Robert

+0

我可以使用開關比if()? –

0

您還可以在CheckedChange上添加偵聽器,並始終將當前選定的單選按鈕存儲在字段中。然後你只需要讀取該值,一旦你點擊了confirmmbutton。這是方便的,如果你有超過10個單選按鈕

private RadioButton selectedButton; 

//handler for Radio Buttons. 
private void onRadioChange(Object sender, EventArgs e){ 
    if (((RadioButton)sender).Checked) 
     this.selectedButton = (RadioButton)sender; 
} 

// handler for confirm button. 
private void confirm(Object sender, EventArgs e){ 
    MessageBox.show(selectedButton.name + " selected"); 
} 

untestet,但方式應該工作。

相關問題