0

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

在登录对话框中,用户输入他的密码,然后单击确定。在确定按钮处理程序中,我调用 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 按钮处理程序中工作的解决方案。

4

1 回答 1

1

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

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

if LoginForm.ShowModal = mrOK then
  AdminForm.ShowModal;

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

如果您确实必须让登录表单的ShowModal方法在管理也完成之前不返回,那么您可以简单地在管理表单中隐藏登录表单:

procedure TAdminForm.FormShow(Sender: TObject);
begin
  LoginFOrm.Hide;
end;
于 2013-06-06T16:10:32.527 回答