自定义表单始终返回DialogResult.Cancel

时间:2017-11-12 22:28:25

标签: c# .net winforms dialog

我已经实现了一个用作DialogBox的表单,我使用ShowDialog方法使用它并检索它的DialogResult,它由它实现的两个按钮设置:

iris[i,]

问题是,即使DialogResult属性设置为None或OK,ShowDialog返回的值也始终为Cancel。

我错过了什么?

1 个答案:

答案 0 :(得分:2)

调用Close会将DialogResult属性设置为Cancel覆盖在调用Close之前设置的任何内容。您可以使用调试器轻松验证这一点,并在调用Close之前和之后检查 this.DialogResult 的值。

但是,当表单以模态显示时,您不需要,通常不应该调用Close。您可以隐藏表单只是设置属性DialogResult导致您的代码退出调用ShowDialog。

设置DialogResult属性但仅隐藏时,模态显示的表单不会关闭。这允许调用代码访问表单的属性并采取适当的操作。

此外,最好将表单的初始化调用包含在using语句中,以便在不再需要时将其设置为模态表单。 (当然,非模态显示的形式不是这种情况)

using(RegisterForm registerForm = new RegisterForm())
{
     DialogResult dialogResult = registerForm.ShowDialog(); 
     if(dialogResult == DialogResult.OK)
     {
        .....
     }
}  
// <== At this point the registerForm instance has been Closed and Disposed 
//     It is no more in scope and you cannot use it in any way
....
private void btRegister_Click(object sender, EventArgs e)
{
    DialogResult = !string.IsNullOrEmpty(Key) ? 
                    DialogResult.OK : DialogResult.None;
}

private void btCancel_Click(object sender, EventArgs e)
{
    DialogResult = DialogResult.Cancel;
}