C# 在一组radiobutton中的任何一个发生更改时触发事件

C# 在一组radiobutton中的任何一个发生更改时触发事件,c#,C#,情况如下: 我有一个按钮,目前还没有启用。 我有5个单选按钮,其中一个总是选中的 我想在选择其他单选按钮时启用ButtonA 我想做一些类似的事情 private void RadioButton1_CheckedChanged(object sender, EventArgs e) { ButtonA.Enabled = true; } private void RadioButton2_CheckedChanged(object sender, EventArgs e) { ButtonA

情况如下:

我有一个按钮,目前还没有启用。 我有5个单选按钮,其中一个总是选中的

我想在选择其他单选按钮时启用ButtonA

我想做一些类似的事情

private void RadioButton1_CheckedChanged(object sender, EventArgs e)
{
ButtonA.Enabled = true;
}

private void RadioButton2_CheckedChanged(object sender, EventArgs e)
{
ButtonA.Enabled = true;
}
。。。等等


可能有一个更优雅的解决方案,我不知道。

您可以使用一个方法作为所有单选按钮的事件处理程序:

private void RadioButtonChanged(object sender, EventArgs e)
{
    ButtonA.Enabled = true;
}

private void HandleEvents()
{
    this.RadioButton1.CheckedChanged += RadioButtonChanged;
    this.RadioButton2.CheckedChanged += RadioButtonChanged;
    this.RadioButton3.CheckedChanged += RadioButtonChanged;
}
或者一个循环来做同样的事情:

private void RadioButtonChanged(object sender, EventArgs e)
{
    ButtonA.Enabled = true;
}

private void HandleEvents()
{
    foreach(var rb in new[] {RadioButton1, RadioButton2, RadioButton3})
        rb.CheckedChanged += RadioButtonChanged;
}
甚至循环中设置的lambda事件处理程序:

private void HandleEvents()
{
    foreach(var rb in new[] {RadioButton1, RadioButton2, RadioButton3})
        rb.CheckedChanged += (o,e) => ButtonA.Enabled = true;
}

让1个这样的事件处理程序怎么样:

private void RadioButton_CheckedChanged(object sender, EventArgs e)
{
    ButtonA.Enabled = true;
}
然后,您可以使用表单设计器将此方法名称分配给所有单选按钮的CheckedChanged事件

这将使您无需为每个单选按钮重复代码

另一个技巧是将所有单选按钮添加到设计器中的组框或面板中,然后它们都将是该控件的子控件

然后,您可以将以下代码添加到表单的加载事件处理程序中:

foreach(var radioButton in radioGroupBox.Controls.Cast<Control>()
                                        .Where(i => i is RadioButton)
                                        .Cast<RadioButton>())
{
    radioButton.CheckedChanged += RadioButton_CheckedChanged;
}
foreach(radioGroupBox.Controls.Cast()中的var radioButton)
.其中(i=>i为单选按钮)
.Cast())
{
radioButton.CheckedChanged+=radioButton\u CheckedChanged;
}

这样,如果您向组中添加了更多单选按钮,则无需更改任何代码。

不,这是您可以获得的最简单的代码。为什么不创建单选按钮列表,而不是让所有单选按钮使用相同的事件处理程序,那么您无需重复代码…谢谢,我还没有真正做到这一点。我会尽可能快地阅读。在+=无线电按钮更改后,是否添加(发件人,e);那里?非常感谢。我对c#很陌生,所以我会努力让你的第一种方法发挥作用。没问题。第二个解决方案使用了第一个解决方案中的代码,但这只是意味着如果要添加更多单选按钮,则无需转到设计器进行更改。但是如果您计划只使用5,那么在设计器中只添加5次处理程序是没有害处的。