我的应用程序有一个管理对话框,可以通过登录对话框(两个模态)访问。
在登录对话框中,用户输入密码,然后单击“确定”。在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按钮处理程序中运行的解决方案。
答案 0 :(得分:1)
正确的方法确实是从第三位显示两种形式。那个地方已经存在,所以在那里添加更多的代码应该没什么大不了的。
用于检查“LoginForm中的某个变量”的伪代码不需要存在;登录表单的模态结果已经告诉您是否有人设法登录:
if LoginForm.ShowModal = mrOK then
AdminForm.ShowModal;
登录表单的任务是处理登录。登录表单不应该关注该任务完成后应该发生的事情。这是“第三位”,它的工作是驱动程序并将所有单独的部分链接在一起。
如果您确实必须使登录表单的ShowModal
方法在管理完成之前不返回,那么您只需在管理表单中隐藏登录表单:
procedure TAdminForm.FormShow(Sender: TObject);
begin
LoginFOrm.Hide;
end;