C#CheckBox Checked Value不正确

时间:2014-01-20 23:05:19

标签: c# winforms visual-studio-2012 checkbox

这让我疯了。我有一个简单的CheckBox,当选中时,按下按钮时会假设做一些额外的工作。如果未选中CheckBox,则不会执行额外的工作。很简单,你会想。

private void previewButton_Click(object sender, EventArgs e)
{
    MessageBox.Show(mfsCheckbox.CheckState.ToString());
    if (mfsCheckbox.CheckState == CheckState.Checked)
    {
        //never gets here
        //do extra stuff
    }
    if (mfsCheckbox.Checked)
    {
        //never gets here
        //do extra stuff
    }
}

private void mfsCheckbox_CheckedChanged(object sender, EventArgs e)
{
    MessageBox.Show(mfsCheckbox.CheckState.ToString());
    if (mfsCheckbox.Checked)
    {
        mfsCheckbox.Checked = true;
        mfsCheckbox.CheckState = CheckState.Checked;
    }
}

运行此代码时,我选择CheckBox,并根据CheckChanged事件代码显示“已检查”。为了更好地衡量,我甚至在CheckChanged事件中设置了两个状态,以确保它们被正确设置。然后,我直接点击预览按钮,它刚刚告诉我CheckBox是“已检查”并且显示“未选中”并且没有运行我的if语句......

基本上,它从Checked变为Unchecked,即使我可以直观地看到它仍然被检查,并且在我以编程方式确保它的状态应该被“检查”之后。

感谢您的帮助。

更新:通过极限代码调用另一个模块的初始化组件。我会尽可能地承担对晚年服务器的责任,以维持生命的尽职尽责。投票关闭,因为这对任何人都没有价值。

1 个答案:

答案 0 :(得分:1)

MSDN在CheckBox.CheckState

中说
  

如果ThreeState属性设置为false,则为CheckState属性   value只能在代码中设置为CheckState.Indeterminate而不是   用户互动。

如果您只想在CheckState被检查时执行代码

,似乎需要一种不同的方法

您可以添加另一个仅在选中第一个复选框时启用的复选框

private void mfsCheckbox_CheckedChanged(object sender, EventArgs e)
{
    checkForExtraStuff.Enabled = mfsCheckbox.Checked;
}

private void previewButton_Click(object sender, EventArgs e)
{
    if (mfsCheckbox.Checked)
    {
        //do basic stuff
        if (checkForExtraStuff.Checked)
        {
            //do extra stuff
        }
    }
}