C# Winform 单选按钮行为

C# Winform Radio button behavior

我有 2 个单选按钮在 _CheckedChanged 事件上调用 2 个方法

private void manual_radioBtn_CheckedChanged(object sender, EventArgs e)
        {
            SendDataManual();
        }

private void auto_radioBtn_CheckedChanged(object sender, EventArgs e)
        {
            SendDataAuto();
        }

现在当我检查单选按钮时,无论是哪一个,都会触发两个功能。

当我检查 manual_radioBtn 时,SendDataManual()SendDataAuto() 都被调用,如果我检查 auto_radioBtn 此外,SendDataManual()SendDataAuto() 都被调用。

我知道如果我使用 Click 事件而不是 CheckedChanged,则不会发生此行为。但是 CheckedChanged 甚至不是单选按钮的默认值。

这是单选按钮的正常行为还是使用 2 个单选按钮时的特定行为

如果有3个按钮怎么办,会不会同时触发3个按钮事件下的所有方法?

事件名称泄露了它的目的 - CheckedChanged 表明 RadioButtonChecked 状态已经改变。这并不是说 Checked = true(或其他),只是它的值发生了变化。

来自docs,CheckedChanged:

Occurs when the value of the Checked property changes.

处理此问题的一种方法是检查代码中 Checked 属性 的值:

private void manual_radioBtn_CheckedChanged(object sender, EventArgs e)
{
    if (manual_radioBtn.Checked)
        SendDataManual();
}

private void auto_radioBtn_CheckedChanged(object sender, EventArgs e)
{
    if (auto_radioBtn.Checked)
        SendDataAuto();
}

我更喜欢在一个函数中处理这个问题,比如:

private void manual_radioBtn_CheckedChanged(object sender, EventArgs e)
{
    SendData();
}

private void auto_radioBtn_CheckedChanged(object sender, EventArgs e)
{
    SendData();
}

private void SendData()
{
    if (manual_radioBtn.Checked)
        SendDataManual();
    else if (auto_radioBtn.Checked)
        SendDataAuto();
}

使用单个函数来处理对事件的响应的一个优点是您只需要一个事件处理程序来处理所有适当的 CheckedChanged 事件,而不是每个 RadioButton 事件处理程序。当你有两个时,这可能看起来并不重要,但想象一下你有 20 个。