我的应用程序中有16个单选按钮.. 我必须根据选择的一个来设置一个变量..而且我已经制作了一些非常难看的代码。
private void Foo_CheckedChanged(object sender, EventArgs e)
{
convertSource = 1;
}
private void Bar_CheckedChanged(object sender, EventArgs e)
{
convertSource = 2;
}
private void Baz_RadioButton_CheckedChanged(object sender, EventArgs e)
{
convertSource = 3;
}
现在,我一直在思考它,说实话,我认为可能有一种方法可以通过开关实现它。我只是无法在脑海中概念化它。
如果有人能告诉我更有效的方法,我真的很感激。 这真是让我烦恼的是,这样一个简单的事情就是需要50到70行代码。
感谢, cpatton
答案 0 :(得分:0)
就个人而言,如果有超过2个或3个选择,我讨厌单选按钮 - ComboBox
可以更好地控制从多个选项中选择一个选项。
但是,快速解决问题的方法是将每个单选按钮的convertSource值放入该控件的Tag
属性中(在设计器中执行此操作)。将此方法添加到表单中:
private void rb_CheckedChanged(object sender, EventArgs e)
{
convertSource = (int)((RadioButton)sender).Tag;
}
在表单的加载事件中(假设这些单选按钮都在组框中),请按以下方式分配处理程序:
foreach (RadioButton rb in groupBox1.Controls)
{
rb.CheckedChanged += rb_CheckedChange;
}
确保删除手动添加的所有事件处理程序(如Foo_CheckedChanged
)。
答案 1 :(得分:0)
您可以将同一个处理程序绑定到多个事件。您可以编写一个处理程序并检查哪个是发件人:
private void RadioButton_CheckedChanged(object sender, EventArgs e)
{
if (sender == Foo_RadioButton) {
convertSource = 1;
} else if (sender == Bar_RadioButton) {
convertSource = 2;
} else if (sender == Baz_RadioButton) {
convertSource = 3;
} else {
// Error
}
}
或者更简洁:
private void RadioButton_CheckedChanged(object sender, EventArgs e)
{
List<RadioButton> radioButtons = new List<RadioButton> {
Foo_RadioButton,
Bar_RadioButton,
Baz_RadioButton
};
int index = radioButton.IndexOf((RadioButton)sender);
convertSource = index + 1;
}
您可以将此处理程序绑定到每个单选按钮的属性窗口中的CheckedChanged事件。