我有很多单选按钮,所以我最终得到的代码看起来像这样
if (rbFrenchImp.Checked)
{
}
else if (rbFrenchMet.Checked)
{
}
else if (rbEnglishImp.Checked)
{
}
else if (rbFrenchEuro.Checked)
{
}
//etc...
所以我想知道,是否可以使用带单选按钮的开关盒?如果是的话怎么样?
答案 0 :(得分:6)
是的,你可以:
您为每个单选按钮订阅相同的CheckChanged(或类似)事件处理程序。然后你输入一些像这样的代码:
RadioButton btn = sender as RadioButton;
if(btn!= null && btn.IsChecked)
{
Switch(btn.Name)
{
case "rbFrenchImpl":
break;
...
}
}
这适用于所有类型的框架。
答案 1 :(得分:4)
感觉有点hacky,但您可以设置一个Dictionary<RadioButton, Action>
,其中包含RadioButton
控件和相应方法(无参数void
方法之间的映射,与Action
委托相匹配签名):
Dictionary<RadioButton, Action> _rbMethods = new Dictionary<RadioButton, Action>();
加载表单时,将按钮和相应的方法添加到地图中:
_rbMethods.Add(rbFrenchImp, FrenchImpAction);
_rbMethods.Add(rbFrenchMet, FrenchMetAction);
_rbMethods.Add(rbEnglishImp, EnglishImpAction);
然后,您可以非常轻松地为已选中的单选按钮(或按钮,如果它们位于不同的组中)调用相应的方法:
foreach (RadioButton key in _rbMethods.Keys.Where(rb => rb.Checked))
{
_rbMethods[key]();
}
答案 2 :(得分:2)
这是我找到的用于将带有多个单选按钮的“if语句”更改为案例开关的最佳方法。您只需使用单选按钮选择属性下的事件选项卡,然后选择“已检查”事件下的radioButton_Click。我希望这将有助于将来的人。
private void radioButton_Click(object sender, RoutedEventArgs e)
{
RadioButton radioBtn = (RadioButton)sender;
if (radioBtn.IsChecked == true)
{
switch (radioBtn.Name)
{
case "radioBtnName1":
//do something
break;
case "radioBtnName2":
//do something
break;
case "radioBtnName3":
//do something
break;
case "radioBtnName4":
//do something
break;
}
}
}
答案 3 :(得分:1)
你的意思是RadioButtonList
?如果是这样,您只需查找.SelectedValue
。
否则,如果您刚刚选择了单选按钮,那么您只能以某种方式循环使用它们。但是,我猜你可以用RadioButtonList取代你拥有的方案,以取得某种成功。
答案 4 :(得分:0)
如果您使用的是ASP.NET,则可以使用radiobuttonlist并在此example 中进行切换,但不了解Windows窗体或wpf
答案 5 :(得分:0)
//create a global radioCheckStatus
RadioCheckStatus radioStatus = RadioCheckStatus.none;
//declare your enum
private enum RadioCheckStatus
{
none = 0,
rbFrenchImp = 1,
rbFrenchMet = 2,
rbEnglishImp = 3,
rbFrenchEuro = 4
}
//On CheckedChanged event of your radioButtons set it to changed radioButtons enum
private void rbFrenchImp_CheckedChanged(object sender, EventArgs e)
{
radioStatus = RadioCheckStatus.rbFrenchImp;
}
// whereever you want to check the selected value
switch (radioStatus)
{
case RadioCheckStatus.rbFrenchImp:
{
break;
}
case RadioCheckStatus.rbFrenchEuro:
{
break;
}
case RadioCheckStatus.rbEnglishImp:
{
break;
}
case RadioCheckStatus.rbFrenchMet:
{
break;
}
default:
break;
}
答案 6 :(得分:0)
以下是使用Linq的解决方案:
var rbResult = from rb in gbState.Controls.OfType<RadioButton>()
where rb.Checked
select rb;
这会给你一个<IENumerable>RadioButton
。
由于您的Radiobutton应该像GroupBox一样位于Container中,因此IENumberable只能包含1或0个元素。
我认为这应该有效。如果没有,请纠正我
答案 7 :(得分:0)
在每个RadionButton属性中,为actionCommand设置一个值(1、2、3 ...),然后获取按钮组的名称:
switch(Integer.parseInt(buttonGroup.getSelection().getActionCommand()))
{
case 1:
do something...
break;
case 2:
do somenthing...
break;
case 3:
do somenthing...
break;
default:
}