Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C复选框的选中值不正确_C#_Winforms_Visual Studio 2012_Checkbox - Fatal编程技术网

C# C复选框的选中值不正确

C# C复选框的选中值不正确,c#,winforms,visual-studio-2012,checkbox,C#,Winforms,Visual Studio 2012,Checkbox,这让我快发疯了。我有一个简单的复选框,当选中时,当按下一个按钮时,它会做一些额外的工作。如果未选中该复选框,则不会执行额外的工作。你会觉得很简单 private void previewButton_Click(object sender, EventArgs e) { MessageBox.Show(mfsCheckbox.CheckState.ToString()); if (mfsCheckbox.CheckState == CheckState.Checked)

这让我快发疯了。我有一个简单的复选框,当选中时,当按下一个按钮时,它会做一些额外的工作。如果未选中该复选框,则不会执行额外的工作。你会觉得很简单

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;
    }
}
运行此代码时,我选中复选框,根据CheckChanged事件代码,它显示为Checked。为了更好地衡量,我甚至在CheckChanged事件中设置了这两种状态,以确保它们设置正确。然后,我直接点击预览按钮,它刚刚告诉我复选框已选中,它说未选中,不运行我的if语句

基本上,即使在我可以直观地看到它仍然处于选中状态,并且在我以编程方式确保它的状态应该被选中之后,它也会从选中变为未选中

谢谢你的帮助

更新:INITIALIZECOMPONENT在另一个模块中被杂散代码调用。我会把负责的实习生放在夜间服务器上建立终身责任作为惩罚。投票结束,因为这对其他任何人都没有价值。

MSDN在

如果ThreeState属性设置为false,则CheckState属性 值只能设置为CheckState。在代码中不确定,而不是由 用户交互

如果只想在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
        }
    }
}

如果我没有弄错的话,复选框的值还没有在事件处理程序中设置。这可能是问题所在吗?属性ThreeState的值是多少?ThreeState在声明已在事件处理程序MessageBox中选中后为false。此问题似乎与主题无关,因为它是一个特定的问题,对将来看到此帖子的其他人来说永远不会有任何帮助。选中的属性值如何?不同的方法会是什么样子?我已经使用了复选框。在此之前选中了属性,现在才选中此ISSUE…只能为真/假,因此对于三州标志不可行。根据您的要求,可能最好添加另一个复选框,如果第一个复选框未选中,则该复选框保持禁用状态,并且在选中第一个复选框时变为启用状态。此时,用户还可以设置第二个复选框。在众多的配置表单中,我需要确定的是它是否被选中。我之所以求助于CheckState,只是因为Checked由于某种原因不起作用,这才是我真正想弄明白的。对于那些失败的投票者,我试图帮助他们,谢谢你为所有这些工作投了我的赞成票。