如何解决“无法创建表单。当前没有 MDI 表单处于活动状态”的问题。我想制作一个简单的程序,它需要一个登录表单才能访问主表单。我得到了三个表单:主表单(MDI 表单)、Form2(MDIChild)和登录表单(普通)。登录表单将首先出现,然后是主表单,然后当我尝试从主表单调用表单 2 时,将显示错误“无法创建表单。当前没有 MDI 表单处于活动状态”。我在 Windows XP 上使用 Delphi 7。我是初学者。先生非常感谢您。
user1255899
问问题
7840 次
1 回答
4
听起来您让您的 LoginForm 自动创建,并且它是首先创建的。这不起作用,因为Application.CreateForm
在项目文件中创建的第一个表单变成了Application.MainForm
. 为了成为 MDI 应用程序,MainForm
必须是 MDI 父窗口。
解决方案通常是不自动创建您的登录表单,而是自己创建它。为此,您需要编辑 .dpr 文件(Project->View Source
从 IDE 的主菜单中)。
您的项目源现在应该看起来像这样(显然,在Application.CreateForm
调用中使用您的类):
begin
Application.Initialize;
Application.CreateForm(TLoginForm, LoginForm);
Application.CreateForm(TMainForm, MainForm);
Application.CreateForm(TChildForm, ChildForm);
Application.Run;
end.
您需要对其进行修改,以免LoginForm
先创建 。
var
LoginOK: Boolean = False;
begin
LoginForm := TLoginForm.Create(nil);
try
// Show login form. When it closes, see if login worked.
LoginForm.ShowModal;
LoginOK := LoginForm.CanLogin; // However you know login is OK or not here
finally
LoginForm.Free;
end;
if not LoginOK then
Halt; // Login failed - terminate application.
Application.Initialize;
Application.CreateForm(TMainForm, MainForm);
{
I normally do not auto-create anything but the main form
and maybe a datamodule (which you **can** autocreate first -
it is not a form), but a MDI application is pretty useless
without at least one open child window, IMO.
}
Application.CreateForm(TChildForm, ChildForm);
Application.Run;
end.
于 2012-06-23T22:43:07.983 回答