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

但是在 ---> case rbt1.Checked 中将单选按钮转换为字符串时出错

我该如何解决这个问题,或者我还能使用什么?

4

3 回答 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;
           }
于 2013-02-07T13:47:08.130 回答
1

你有 25 个按钮,所以我可能会做类似的事情

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

如果您需要对每个按钮执行不同的操作,那么您将拥有一个 if / else 链,该链根据您的需要执行,但我猜您希望存储所选值并对其进行处理。

于 2013-02-07T13:48:07.417 回答
0

您还可以在 CheckedChange 上添加一个侦听器,并始终将当前选定的单选按钮存储在一个字段中。然后,您只需在单击确认按钮后读取该值。如果您有超过 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,但这种方式应该可行。

于 2013-02-07T13:54:05.017 回答