【问题标题】:Order of radio button events in C#C#中单选按钮事件的顺序
【发布时间】:2014-07-13 03:18:20
【问题描述】:

我在表单上有一些单选按钮。当用户更改单选按钮选择时,我会使用该信息更新另一个对象。每个单选按钮都有一个不同的事件处理程序,但它们都用于 CheckedChanged 事件。

首先触发哪个事件? 失去选择的单选按钮中的 CheckedChanged,还是被选择的单选按钮中的 CheckedChanged?还是比赛?

【问题讨论】:

  • 好问题!我实际上不知道,但为了确定,我只会触发“真实”值。

标签: c# events radio-button


【解决方案1】:

创建一个新的 WinForms 项目需要一分钟,在其上拖动两个单选按钮并将两个单独的事件处理程序分配给它们的 CheckedChanged 事件。所以答案是,在这种情况下:取消选中首先触发。

但是,它是 not documented,因此它可能会随着任何 .NET 更新而改变(不太可能,但仍然如此)。不要将您的应用程序逻辑绑定到它。

如果你能解释你的实际问题,你的问题可以得到更具体的回答。我猜你的代码看起来像这样:

private void radioButton1_CheckedChanged(object sender, EventArgs e)
{
    SomeLabel.Text = "Option 1";
}

private void radioButton2_CheckedChanged(object sender, EventArgs e)
{
    SomeLabel.Text = "Option 2";
}

更改它以考虑单选按钮的状态:

if ((sender as RadioButton).Checked)
{
    SomeLabel.Text = "Option 1";
}

因此您的代码不再依赖于事件的顺序,并且在实际上不需要时不会执行。

【讨论】:

  • 出于好奇,无论选择哪个单选按钮,这都是真的吗?
  • 谢谢,我确实对此进行了相当多的测试,并且我们的代码按照您描述的方式工作。但是由于即使进行了多次测试,竞争条件也不会明显出现(而且通常根本不会出现在同一台机器上),我希望有人能找到这个记录。由于应用程序逻辑当前绑定于此,我将重构代码。
  • @Freefall 考虑到单选按钮的性质,这似乎是合乎逻辑的,但是我找不到确保这种行为的 MSDN 资源。编辑 (if ((sender as RadioButton).Checked)) 有帮助吗?
  • 哦,当然,这就是我要做的。如果 MS 记录了订单,我只是不想撕开(看似)工作代码。
猜你喜欢
  • 1970-01-01
  • 2013-03-12
  • 1970-01-01
  • 2012-06-25
  • 2012-10-09
  • 2011-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多