Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 向导样式:如何在按钮处理程序中关闭当前模式对话框并打开下一个模式对话框?_Delphi_Modal Dialog_Delphi 5 - Fatal编程技术网

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

Delphi 向导样式:如何在按钮处理程序中关闭当前模式对话框并打开下一个模式对话框?,delphi,modal-dialog,delphi-5,Delphi,Modal Dialog,Delphi 5,我的应用程序有一个管理对话框,可以通过登录对话框(两种模式)访问该对话框 在登录对话框中,用户输入密码,然后单击确定。在ok按钮处理程序中,我调用Self.Close(),然后调用AdminForm.showmodel() 问题在于,在返回对AdminForm.showmodel()的调用之前(移动AdminForm时可见),LoginForm在AdminForm后面保持打开状态 有什么想法吗 我知道我可以通过从第三位显示两种形式来解决这个问题,比如 LoginForm.ShowModal();

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

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

问题在于,在返回对AdminForm.showmodel()的调用之前(移动AdminForm时可见),LoginForm在AdminForm后面保持打开状态

有什么想法吗

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

LoginForm.ShowModal();

if <check some variable from LoginForm to see if user logged in successfully> then begin
  AdminForm.ShowModal()
end;
LoginForm.showmodel();
如果是这样,那就开始吧
AdminForm.showmodel()
结束;

但是我正在寻找一种在LoginForm中的ok按钮处理程序中工作的解决方案。

正确的方法确实是从第三个位置显示这两个表单。这个地方已经存在了,所以在那里添加一点代码应该没什么大不了的

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

if LoginForm.ShowModal = mrOK then
  AdminForm.ShowModal;
登录表单的任务是处理登录。登录表单不应该关心任务完成后应该发生什么。它是“第三方”,其工作是驱动程序并将所有单独的部分连接在一起

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

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

嗯,是的,隐藏工作。即使在阅读了文档之后,我也没有真正理解close和hide之间的区别。对我来说,为什么调用close并没有关闭登录表单也是一个谜。实际上,我不在乎登录表单的showmodel方法何时返回,我只是不希望出现不同的对话框。