这让我疯了。我有一个简单的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,即使我可以直观地看到它仍然被检查,并且在我以编程方式确保它的状态应该被“检查”之后。
感谢您的帮助。
更新:通过极限代码调用另一个模块的初始化组件。我会尽可能地承担对晚年服务器的责任,以维持生命的尽职尽责。投票关闭,因为这对任何人都没有价值。
答案 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
}
}
}