单击"确定"按钮时,防止ShowDialog()返回

use*_*923 16 c# dialog showdialog winforms

我有一个对话框,我希望在单击确定按钮时阻止关闭,但它会返回,即使AcceptButton属性设置为none而不是我的OK按钮.什么是阻止它关闭的最佳方法?

Dav*_*nan 30

事实上,你正在改变错误的财产.你当然希望AcceptButton成为OK按钮.此属性确定Windows术语中的默认按钮.这是按下ENTER键盘时按下的按钮.通过更改AcceptButton您只需将键盘界面分解为对话框即可.您不会以任何方式影响按下按钮时发生的情况.

您需要做的是设置DialogResult按钮的属性,DialogResult.None因为这决定按钮是否关闭表单.然后,在按钮的单击处理程序中,您需要决定如何响应按下按钮.我希望,如果对话框的验证成功,您应该通过设置表单的DialogResult属性来关闭对话框.例如

private void OKbuttonClick(object sender, EventArgs e)
{
    if (this.CanClose())
        this.DialogResult = DialogResult.OK;
}
Run Code Online (Sandbox Code Playgroud)


Ste*_*eve 7

停止此行为的最佳方法是DialogResult.None在设计时将"确定"按钮的DialogResult属性更改为属性窗口.

此外,如果您已在OK按钮的单击事件中已有一些代码,则可以更改表单DialogResult.

private void comOK_Click(object sender, EventArgs e)
{
    // your code .....

    // Usually this kind of processing is the consequence of some validation check that failed
    // so probably you want something like this
    if(MyValidationCheck() == false)
    {
        // show a message to the user and then stop the form closing with
        this.DialogResult = DialogResult.None;
    }
}
Run Code Online (Sandbox Code Playgroud)