【问题标题】:C# - Checkbox's CheckChanged Event Has Wrong Checked StateC# - Checkbox CheckedChanged 事件的检查状态错误
【发布时间】:2012-04-19 21:10:07
【问题描述】:

我正在开发一个 Windows 表单,它应该根据复选框的选中状态启用/禁用某些控件。要注意这一点,CheckedChanged 事件有一个事件处理程序。这适用于其他形式,具有相同的确切代码,但在这里无法正常工作。无论复选框是选中还是未选中,选中状态始终为 false。代码如下:

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

就像我说的那样,这个确切的代码可以在一种形式下正常工作 - Checked 状态根据您刚刚更改的内容正确设置为 true 或 false。但在新形式中,无论是检查还是未检查,该方法中的 Checked 状态始终为 false。事件触发良好,并达到我在方法中设置的断点,但 Checked 状态永远不会改变。有什么建议吗?

谢谢!

【问题讨论】:

  • 您要选中的复选框的名称是什么?即使它触发了正确的事件处理程序,也许您正在测试错误的控件(chkDisable)?
  • 尝试使用 CheckBox.CheckState 属性:If(chkDisable.CheckState==CheckState.Checked)

标签: c# events checkbox status checked


【解决方案1】:

检查您的 eventHandler chkDisable_CheckedChanged 是否应用于正确的复选框,即 chkDisable 复选框。

如果问题仍然存在,删除重新拖动复选框控件并应用事件

应用强制转换和捷径不应该是解决问题的正确方法(这是我个人的想法。)

【讨论】:

  • @Alessa:不 :) .. 这是最理智的错误。 :P
  • 不,不是问题。就像我在帖子中所说的那样,事件触发并转到正确的方法。在发布之前,我还仔细检查了正确的复选框是否使用了正确的方法。编辑:Likurg 的回答正确。
  • @Greg:我认为您必须再次删除并重新拖动控件。使用相同的代码而不是强制转换来获得输出。
【解决方案2】:

试试这个

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

【讨论】:

  • 同意,但我认为问题出在与 chkDisable 的链接错误。看他在该代码中的断点处停止,因此他将事件应用于更正复选框。
  • 谢谢,明白了。我仍然很生气,我以不同形式使用的相同代码在这里不起作用,但现在我很高兴克服了这个问题。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-21
  • 2010-12-19
  • 1970-01-01
  • 1970-01-01
  • 2019-09-28
  • 2018-10-01
  • 2016-08-12
相关资源
最近更新 更多