向导样式:如何关闭当前模式对话框并在按钮处理程序中打开下一个模态对话框?

时间:2013-06-06 15:58:12

标签: delphi modal-dialog delphi-5

我的应用程序有一个管理对话框,可以通过登录对话框(两个模态)访问。

在登录对话框中,用户输入密码,然后单击“确定”。在ok按钮处理程序中,我调用Self.Close(),然后调用AdminForm.ShowModal()。

问题是LoginForm在AdminForm后面仍然打开,直到对AdminForm.ShowModal()的调用返回(当您移动AdminForm时可见)。

有什么想法吗?

我知道我可以通过显示第三位的两种形式来解决这个问题,比如

LoginForm.ShowModal();

if <check some variable from LoginForm to see if user logged in successfully> then begin
  AdminForm.ShowModal()
end;

但我正在寻找一个可以在LoginForm中的ok按钮处理程序中运行的解决方案。

1 个答案:

答案 0 :(得分:1)

正确的方法确实是从第三位显示两种形式。那个地方已经存在,所以在那里添加更多的代码应该没什么大不了的。

用于检查“LoginForm中的某个变量”的伪代码不需要存在;登录表单的模态结果已经告诉您是否有人设法登录:

if LoginForm.ShowModal = mrOK then
  AdminForm.ShowModal;

登录表单的任务是处理登录。登录表单不应该关注该任务完成后应该发生的事情。这是“第三位”,它的工作是驱动程序并将所有单独的部分链接在一起。

如果您确实必须使登录表单的ShowModal方法在管理完成之前不返回,那么您只需在管理表单中隐藏登录表单:

procedure TAdminForm.FormShow(Sender: TObject);
begin
  LoginFOrm.Hide;
end;