【发布时间】:2015-09-04 17:50:38
【问题描述】:
我有一个 WinForms 应用程序,只要用户点击取消按钮,它就会检查待处理的更改。如果有待处理的更改,我会提示用户查看他们是否确定要取消。如果他们这样做,我关闭表格。如果没有,我只是返回。但是,无论如何,表格正在关闭。经过一番调试,我意识到这是因为这个特定的按钮设置为表单的CancelButton,所以点击它导致表单关闭。为了验证,我删除了 CancelButton 属性,但行为仍然存在。
如何防止这种自动关闭?这是我的事件处理程序代码:
private void closeButton_Click(object sender, EventArgs e)
{
DialogResult dr = DialogResult.Yes;
if (changesMade)
{
dr = MessageBoxEx.Show(this, "Are you sure you wish to disregard the changes made?", "Changes Made", MessageBoxButtons.YesNo);
}
if (dr == DialogResult.Yes)
{
Close();
}
else
{
//TODO:
}
}
在上面的代码中,只有在没有进行任何更改或用户选择忽略它们时,表单才应该关闭。我进行了更改,然后在对话框中单击“否”,但表单仍然关闭。有无按钮设置为表单的 CancelButton。
【问题讨论】:
-
我建议您在
FormClosingevent 而不是ButtonClick中进行检查。然后相应地设置e.Cancel。这样,无论关闭您的表单(无论是文件 -> 退出、右上角的 X 按钮等)都将始终提示未保存的更改。 -
您是否使用断点和 F10 正确调试?不当行为的原因应该很容易找到。
-
@TobiasKnauss 是的,虽然我没有尝试过除此方法之外的任何其他方法。
-
那么,尽管 close() 没有被调用,表单还是关闭了?如果是这样,则注释掉该函数中的整个代码并再次检查。如果仍然关闭,您需要寻找其他地方。
-
您确定,您删除了“取消按钮”?您可以完全删除按钮并创建一个新按钮。由于我们看不到您的代码,因此很难进一步诊断。