6

对不起,如果这是一个愚蠢的问题,但我是这里的初学者。

我有一个带有两个按钮的简单自定义对话框:接受和取消。接受按钮是表单的接受按钮。

我想对 Accept_Click 事件进行一些验证并决定是否可以关闭对话框,但每次离开此方法时,对话框都会自动关闭并返回 Ok。

我该怎么做才能阻止对话框自行关闭?还是我必须以其他方式做事?

谢谢

4

4 回答 4

11

我将有一个表单级变量(称为 _ 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 功能。

于 2009-04-24T01:29:35.247 回答
2

我会在控件更改时进行验证,并且仅在整个表单有效时才启用“接受”按钮。

这将允许您将按钮保留为默认按钮 (AcceptButton),但可以防止这种情况发生。

于 2009-04-24T01:16:38.520 回答
2

更简洁的解决方案是将 DialogResult 设置为 None:

private void acceptButton_Click(object sender, EventArgs e)
{
    if (!isValid()) {
        this.DialogResult = System.Windows.Forms.DialogResult.None;
    }
}
于 2013-01-03T19:27:22.847 回答
0

表单上的 AcceptButton 或 CancelButton 是否设置为该按钮?如果是这样,请尝试取消设置它并在您想要关闭对话框时在处理程序中手动设置 DialogResult。

于 2009-04-24T01:15:32.097 回答