【问题标题】:how to know which radiobutton is checked?如何知道选中了哪个单选按钮?
【发布时间】:2013-01-23 00:54:14
【问题描述】:

我有这部分代码:(在按钮的点击事件中)

           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 中将单选按钮转换为字符串时出错

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

【问题讨论】:

  • 为什么使用 switch case 而不是 if else?
  • 我有超过 3 个单选按钮,这是一个例子!我的真实代码,我更喜欢 switch

标签: c# windows winforms


【解决方案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;
           }

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 我有超过 3 个单选按钮! 25 正好
    • 我是基于你上面的帖子,如果你有那么多按钮,我可能会在列表中测试它们,给我一秒钟,我会给你一些代码
    • 我可以使用比 if() 更好的开关吗??
    • 根据您的尝试,我认为您不需要链接该声明。大多数时候,人们只是从单选按钮中获取某种值并将其存储在变量中以供以后使用。基本上,如果您想说出名为 red 的单选按钮的字符串值。您只需 var buttonValue = button.Text。像这样链接案例会添加大量您不一定需要的代码。
    【解决方案3】:

    您还可以在 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,但方法应该可行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-04
      • 2019-04-04
      • 2010-10-10
      • 1970-01-01
      相关资源
      最近更新 更多