2012-04-19 190 views
0

我正在开发一个Windows窗体,根据复选框的选中状态启用/禁用某些控件。为了观察这个,有一个CheckedChanged事件的事件处理程序。这适用于其他形式,具有相同的确切代码,但在这里无法正常工作。无论复选框处于选中状态还是未选中状态,选中状态始终为false。下面的代码:C# - 复选框的CheckChanged事件错误检查状态

private void chkDisable_CheckedChanged(object sender, EventArgs e) 
    { 
     if (chkDisable.Checked) 
     { 
      DisableFormFields(); 
     } 
     else 
     { 
      EnableFormFields(); 
     } 
    } 

就像我说的,这个确切的代码在一个形式很好 - 选中状态正确设置为true或根据你只是改变它为false。但是在新的形式中,Checked状态在该方法中始终为false,无论是正在选中还是未选中。事件触发正常,并且击中了我在方法中设置的断点,但Checked状态从不改变。有什么建议?

谢谢!

+0

什么是你想要检查的复选框的名称?即使它触发了正确的事件处理程序,也许你正在测试错误的控件(chkDisable)? – Strillo 2012-04-19 12:40:57

+0

尝试使用CheckBox.CheckState属性:如果(chkDisable.CheckState == CheckState.Checked) – Prashant 2012-04-19 12:42:11

回答

2

试试这个

private void chkDisable_CheckedChanged(object sender, EventArgs e) 
{ 
     if (((CheckBox)sender).Checked) 
     { 
      DisableFormFields(); 
     } 
     else 
     { 
      EnableFormFields(); 
     } 
} 
+0

如果eventhandler应用于不正确的复选框,则无法工作 – Marshal 2012-04-19 12:48:40

+1

同意,但我认为问题出在chkDisable的错误链接上。看他在代码中停止了断点,所以他应用事件来纠正复选框。 – Likurg 2012-04-19 12:59:24

+0

谢谢,明白了。我仍然很烦恼,我用不同形式使用的代码在这里不起作用,但现在我只是很高兴能够解决这个问题。谢谢! – Greg 2012-04-19 13:07:02

3

检查您的eventHandler chkDisable_CheckedChanged是否适用于更正复选框,即复选框为chkDisable复选框。

如果仍然问题persits,删除再拖动 CheckBox控件和套用事件

应用铸造和快捷方式不应该是正确的方法来解决问题(这是我个人认为)。

+0

最正常的答案) – Cynede 2012-04-19 12:44:12

+0

@Alessa:不:)。它最为理智的错误。 :P – Marshal 2012-04-19 12:49:23

+0

不,不是问题。就像我在帖子中所说的那样,事件触发并采用正确的方法。在发布之前,我还仔细检查了正确的复选框是否使用了正确的方法。编辑:Likurg的答案正确工作。 – Greg 2012-04-19 13:04:37