我已经实现了一个用作DialogBox的表单,我使用ShowDialog方法并检索它的DialogResult,它由它实现的两个按钮设置:
DialogResult dialogResult = registerForm.ShowDialog();
private void btRegister_Click(object sender, EventArgs e)
{
DialogResult = !string.IsNullOrEmpty(Key) ? DialogResult.OK : DialogResult.None;
Close();
}
private void btCancel_Click(object sender, EventArgs e)
{
DialogResult = DialogResult.Cancel;
Close();
}
问题是,即使DialogResult属性设置为None或OK,ShowDialog返回的值也始终为Cancel .
我错过了什么?
1 回答
调用Close会将DialogResult属性设置为Cancel覆盖在调用Close之前设置的任何内容 . 您可以使用调试器轻松验证这一点,并在调用Close之前和之后检查this.DialogResult的值 .
但是,当表单以模态方式显示时,您不需要,通常不应该调用Close . 您可以隐藏表单只是设置属性DialogResult导致您的代码退出调用ShowDialog .
设置DialogResult属性但仅隐藏时,不会关闭以模态方式显示的表单 . 这允许调用代码访问表单的属性并采取适当的操作 .
此外,最好将表单的初始化调用包含在using语句中,以便在不再需要时自动处理 modal 表单 . (当然,非模态显示的表格不是这种情况)