对不起,如果这是一个愚蠢的问题,但我是这里的初学者。
我有一个带有两个按钮的简单自定义对话框:接受和取消。接受按钮是表单的接受按钮。
我想对 Accept_Click 事件进行一些验证并决定是否可以关闭对话框,但每次离开此方法时,对话框都会自动关闭并返回 Ok。
我该怎么做才能阻止对话框自行关闭?还是我必须以其他方式做事?
谢谢
对不起,如果这是一个愚蠢的问题,但我是这里的初学者。
我有一个带有两个按钮的简单自定义对话框:接受和取消。接受按钮是表单的接受按钮。
我想对 Accept_Click 事件进行一些验证并决定是否可以关闭对话框,但每次离开此方法时,对话框都会自动关闭并返回 Ok。
我该怎么做才能阻止对话框自行关闭?还是我必须以其他方式做事?
谢谢
我将有一个表单级变量(称为 _ vetoClosing
)在接受按钮的 Click 事件中,我将运行验证并基于此设置变量:
private void acceptButton_Click(object sender, EventArgs e)
{
// Am I valid
_vetoClosing = !isValid();
}
然后在 FormClosing 事件中,如果 _vetoClosing 为真,我将取消关闭
private void Form_FormClosing(object sender, FormClosingEventArgs e)
{
// Am I allowed to close
if (_vetoClosing)
{
_vetoClosing = false;
e.Cancel = true;
}
}
关闭接受按钮不是最佳选择,因为您失去了 Enter to Press 功能。
我会在控件更改时进行验证,并且仅在整个表单有效时才启用“接受”按钮。
这将允许您将按钮保留为默认按钮 (AcceptButton),但可以防止这种情况发生。
更简洁的解决方案是将 DialogResult 设置为 None:
private void acceptButton_Click(object sender, EventArgs e)
{
if (!isValid()) {
this.DialogResult = System.Windows.Forms.DialogResult.None;
}
}
表单上的 AcceptButton 或 CancelButton 是否设置为该按钮?如果是这样,请尝试取消设置它并在您想要关闭对话框时在处理程序中手动设置 DialogResult。