为什么将我的radiobuttons绑定到应用程序设置会在单击时更改其行为?

时间:2010-06-25 06:22:48

标签: .net winforms radio-button application-settings

  

可能重复:
  Using ApplicationSettings to store Checked property for WinForms RadioButtons

我在groupbox中有三个radiobuttons。当它们不受应用程序设置的约束时,它们的行为正常。

将每个已检查的属性绑定到应用程序设置后,会发生以下情况:我必须单击未经检查的单选按钮两次才能检查它。第一次点击后,所有三个都未选中。

我也试过只绑定其中两个,但行为是一样的。

有人可以帮忙吗?

感谢。

我也在MSDN Visual Basic General Forum询问。

1 个答案:

答案 0 :(得分:7)

您可以将以下事件处理程序添加到GroupBox中三个RadioButton(其中Checked属性绑定到应用程序设置)中的每一个的Click事件:

Private Sub RadioButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tomRadioButton.Click, dickRadioButton.Click, harryRadioButton.Click
    If sender.Checked = False Then
        sender.Checked = True
    End If
End Sub

它很有效,即使单击它后检查一个未检查的RadioButton需要半秒钟。

两年前(2008年)在湍流互动博客{感谢Surviving WinForms Databindingohadsc帖子的第5部分(2008年)解释了问题的原因:

  

规则5:不要绑定到可点击的单选按钮

     

我知道如果你有多好   可以绑定你的收音机   枚举属性的按钮。我真的   做。你认为你只是去   挂钩一些Format和Parse事件   翻译回你的枚举,和   一切都会好起来。真是太糟糕了   方便,如果它确实有效。但   WinForms并没有因此而被切断。   现在有3个完整版本(或者是3.5版)   发布?),情况一直如此。   这是因为事件顺序,这是   不是MS可以去的东西   切换而不会造成数千人   让开发人员真正变得干酪   关闭。

     

这个问题真的归结为   与其他控制数据不同的事实   属性,a的Checked属性   单选按钮实际上没有改变   直到焦点离开单选按钮。   和所有WinForms控件一样   焦点实际上并没有离开收音机   按钮,直到焦点给予   另一个控制,事实上直到   在新的Click事件之后   集中控制已经解雇。结果   其中,因为它涉及无线电   按钮,如果你试图绑定到   他们,你的绑定属性   数据源实际上会落后于你的   单选按钮的视觉状态   点击即可。如果你只有两个收音机   按钮,数据源将是   正好与可见状态相反,   直到你点击其他地方   不触发那个动作   引用那些数据源   属性。哪个可以做到这一点   真正令人愤怒的bug追查。   我几乎以为我是幻觉。

     

现在,说实话,这是可能的   让它起作用。但它是最愚蠢的   曾经克服的kludge。好吧也许吧   它不是那么糟糕......但它是一个混乱的   黑客肯定。这需要很多工作   对于真正需要的东西   已经可用了。尽可能接近我   告诉,解决这个问题的唯一方法   没有放弃的问题   数据绑定机制是   基本上制作自己的RadioButton   控制,财产变化和   事件顺序实际上有用。   你可以从头写一个,   或子类RadioButton和覆盖   所有具有自定义的事件逻辑   消息处理。

相关问题