是否有更有效的方法在Radio Button CheckedChanged事件上设置变量?

时间:2010-03-30 01:47:30

标签: windows events forms radio-button

我的应用程序中有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

2 个答案:

答案 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事件。