以编程方式触发事件C#

时间:2018-06-25 10:42:03

标签: c# events

我在一个容器中有几个单选按钮。对于每个事件,我都有一个CheckedChanged事件,所以我有一个这样的代码

private void radioButton1_CheckedChanged(object sender, EventArgs e)
{
    if ((sender as RadioButton).Checked)
    // do stuff...
}
private void radioButton2_CheckedChanged(object sender, EventArgs e)
{
    if ((sender as RadioButton).Checked)
    // do stuff...
}
private void radioButton3_CheckedChanged(object sender, EventArgs e)
{
    if ((sender as RadioButton).Checked)
    // do stuff...
}
// ... and so on...

然后,我必须为当前选中的CheckedChanged触发radioButton事件。要获得radioButton,我使用了以下代码:

RadioButton checkedButton = container.Controls.OfType<RadioButton>()
                            .FirstOrDefault(r => r.Checked);

现在如何为CheckedChanged触发checkedButton事件?

编辑:我正在使用WinForms。我的单选按钮在tabPage中。当我打开tabPage时,我需要知道什么是当前检查的radioButton并触发相应的checkedChanged事件。这是因为当我选择另一个tabPage时,我还要执行其他操作,然后返回到包含单选按钮的tabPage,我需要恢复以前的状态。

1 个答案:

答案 0 :(得分:1)

更改Checked属性的值会触发该事件:

checkedButton .Checked = !checkedButton .Checked;

您还可以显式调用事件处理程序,例如:

RadioButton checkedButton = container.Controls.OfType<RadioButton>().FirstOrDefault(r => r.Checked);
switch (checkedButton.Name)
{
    case "radioButton1":
        radioButton1_CheckedChanged(this, EventArgs.Empty);
        break;
    case "radioButton2":
        radioButton2_CheckedChanged(this, EventArgs.Empty);
        break;
    case "radioButton3":
        radioButton3_CheckedChanged(this, EventArgs.Empty);
        break;
}

根据您的要求,您当然可以考虑为所有RadioButtons使用相同的事件处理程序。