为什么我的MDI窗体会报错?(程序中明明有一父一子窗体,但出错却总说没父窗体)(80分)

  • 主题发起人 主题发起人 hzzkf
  • 开始时间 开始时间
H

hzzkf

Unregistered / Unconfirmed
GUEST, unregistred user!
我的程序流程大致是这样的,先有一个登录界面,帐号密码核对成功后进入主窗体
(此窗体为MDI父窗体,用SHOWMODAL显示),但我在上面显示一个MDI子窗体时却总报错,
说什么MDI父窗体未激活。我试了一下,出错的提示就好像你新建一个应用程序,然后直接
将FORM置为MDI子窗体编译运行一样,怎么回事?
 
此窗体为MDI父窗体,用SHOWMODAL此处有误
show
 
用SHOW也一样,似乎程序开始时就必须出现父窗口,不能被其它窗体调用
 
在delphi menu projrct -option 中将main from 选择主窗体Mainform
在主窗提的show中显示登录界面
procedure TMainForm.FormShow(Sender: TObject);
Var
LoginChild:TLoginForm;
begin
LoginChild:=TLoginForm.Create(self);
if LoginChild.ShowModal<>mrok then
begin
Close;
end
else
begin
end;
end;
主窗体即不用show也不用showmodal
 
cnaoszh:
你的方法虽然能用,但程序的流程有些颠倒,且我要改动一些代码,很麻烦,有没有
更好的方法?
 
最终解决办法:

Password窗体不能放入Available Forms中必须在: Auot-Create forms中,不能为子窗口。

设置Password窗体的Visible属性为true;

在project1.dpr中加上一句: Application.ShowMainForm := False;

密码通过后加上一句:MainForm.visible:=true;

 
有在delphi menu projrct -view source
program LogoApp;

uses
Forms,
LogoMain in 'LogoMain.pas' {LogoAppForm},
About in 'ABOUT.PAS' {AboutBox};

{$R *.RES}

begin
Application.Initialize;
Application.CreateForm(TLogoAppForm, LogoAppForm);
Application.CreateForm(TAboutBox, AboutBox);
AboutBox.Showmodal;
Application.CreateForm(TLogoAppForm, LogoAppForm);
Application.Run;
end.
即可
 
redsky.l和cnaosz:
我所有的窗体都在Auot-Create forms中?
我的密码窗口是DLFORM,MDI父窗口是MAINFORM,MDI子窗口是SELECTFORM,请你们将语句
写的清楚点
 
那就错了子窗口必须在:Available Forms;
Auot-Create forms中只放password窗体和MainForm窗口(如果你没有其他要showmodal的窗口)

没有代码了只要设置就行了。
设置PasswordForm的 FormStyle 为 fsNormal

如果还不行给个信箱给你个源码!
 
你的password窗体和MainForm窗口话在Auot-Create forms中只,而password窗体肯定是位
于MainForm窗口前的,对不对?那有可能是子窗口默认password窗体为MDI父窗体了,而
password窗体你肯定是在输入口令后就关闭了,所以导致说是没有MDI父窗体。
 
还是给个源码吧,谢了!
hzzkf@8848.net
 
教父:
你可以自己做个实验,新建一个程序,FORM1为普通窗体,上面放个BUTTON,事件为
SHOW FORM2(此窗体为MDI父窗口),FORM3为MDI子窗体,程序肯定出错
 
请大家发一个例程给我,谢了!
hzzkf@8848.net
 
你可以自己做个实验,新建一个程序,FORM1为普通窗体,上面放个BUTTON,事件为
SHOW FORM2(此窗体为MDI父窗口),FORM3为MDI子窗体,程序肯定出错
这样肯定是错的
因为你的form1是主窗体,而一个mdi父窗体是必须为主窗体
所以

//我的程序流程大致是这样的,先有一个登录界面(form2),帐号密码核对成功后进入主窗体(form1)
//(此窗体为MDI父窗体,用SHOWMODAL显示),但我在上面显示一个MDI子窗体(form3)时却总报错,
//说什么MDI父窗体未激活。我试了一下,出错的提示就好像你新建一个应用程序,然后直接
//将FORM置为MDI子窗体编译运行一样,怎么回事?
解决方案为:
1。delphi menu projrct -option 中将将 form2设为主窗体
2。
在delphi menu projrct -view source
Application.Initialize;
Application.CreateForm(TForm1, Form2);
Application.CreateForm(TForm2, Form1);
Form1.showmodal;
Application.Run;
即可




 
过来了。签收!
 
多人接受答案了。
 
to hzzkf:我说的就是那个意思,你还叫我做试验?
 
后退
顶部