0

我有一个由我的所有单选按钮共享的事件处理程序:

private void radioButtonPackers_CheckedChanged(object sender, EventArgs e)
{
    var rb = sender as RadioButton;
    if (rb == radioButtonPackers)
    {
        team = NFCNorth.Packers;
    } else if (rb == radioButtonBears)
    {
        team = NFCNorth.Bears;
    } else if . . .
}

rb 始终被视为 radioButtonPackers,即使在我检查了 radioButtonBears、radioButtonVikings 或 radioButtonLions 单选按钮之后也是如此。

我是否必须做类似的事情:

if (radioButtonPackers.Checked)
{
    team = NFCNorth.Packers;
}
else if (radioButtonBears.Checked)
{
    team = NFCNorth.Bears;
}
. . .

?

4

4 回答 4

2

实际上,它不会以这种方式工作。它必须像sender单击任何单选按钮一样接收。您的困惑可能与您可以收到两次的事实有关radioButtonPackers_CheckedChanged,以防单选按钮被分组,因此当单击一个时,当前一个

  • 首先变为未选中(因此引发事件)
  • 在出现“新”单选按钮事件之后
于 2012-09-21T20:19:31.070 回答
1

是的,您需要查看.Checked房产。

第一次单击其中一个单选按钮时,CheckedChanged会触发一个事件(用于“打开”按钮)。然后,当您单击同一组中的不同单选按钮时CheckedChanged,会触发两个事件,一个用于取消选中第一个单选按钮,另一个用于检查第二个单选按钮。

http://msdn.microsoft.com/en-us/library/system.windows.forms.radiobutton.checkedchanged.aspx

于 2012-09-21T20:26:52.437 回答
1

我的猜测是您的代码工作正常,但是您看到 CheckedChanged 事件被触发为先前选择的 RadioButton 当它从被选中变为未选中时,在刚刚选择的 RadioButton 得到它的检查(并且事件触发它)之前。

于 2012-09-21T20:27:32.047 回答
1

您需要注意rb.Checked,但根据我的经验,无论如何您都会在获得“已检查”事件之前获得“未检查”事件。这是一个简短但完整的示例,它有效:

using System;
using System.Windows.Forms;

class Program
{
    public static void Main()
    {
        var b1 = new RadioButton { Text = "Button 1" };
        var b2 = new RadioButton { Text = "Button 2" };

        EventHandler handler = (sender, args) => {
            RadioButton button = (RadioButton) sender;
            Console.WriteLine("{0} {1}",
                button.Text,
                button.Checked ? "Checked" : "Unchecked");
        };

        b1.CheckedChanged += handler;
        b2.CheckedChanged += handler;

        var form = new Form {
            Controls = {
                new FlowLayoutPanel {
                    FlowDirection = FlowDirection.TopDown,
                    Controls = { b1, b2 }
                }
            }
        };
        Application.Run(form);
    }    
}

如果您单击按钮 1,然后单击按钮 2,您将看到:

Button 1 Checked    
Button 1 Unchecked    
Button 2 Checked
于 2012-09-21T20:28:52.870 回答