窗口显示问题(100分)

  • 主题发起人 主题发起人 zws
  • 开始时间 开始时间
Z

zws

Unregistered / Unconfirmed
GUEST, unregistred user!
有2个窗口,form1为MDIFORM,FORM2为MDICHILD,在FORM1中显示FORM2,用
FORM2.SHOW;
就会出错,而用
TFORM2.CREATE(SELF);
可以显示FORM2,但可以显示无数个,而我只想让他只显示一个
请问应怎样解决?
 

1、用Form2.Show 应该不会出错
2、有许多办法,比如:在Form2创建时设置Tag=100,每次Create时遍历一下所有
的Child,找Tag=100 if found() then exit else create and show it
 
首先你的 Form2 是搁在 project/option 哪里的,
autocreate 不需要 create
available 需要手动 create

显示无数个是什么意思?

如果只显示一个, mdi 就没有意义了。
 
显示无数个是指按一下菜单就出现一个窗体,再按一下有出现一个,我的意思使防止出现多个同样的窗体
一个MDIFORM中当然有多个MDICHILD FORM,我只是简化一下问题
form1在AUTOCREATE,FORM2在AVAILABLE中,用FORM2.SHOW出错
康夫:第2个问题能否说的详细些,最好写出源代码,我是DELPHI初学者,我在使用VB时
用MDI不会出现这种问题.
 
你是否想在显示form2时,不能再显示其他窗口,或是进行其他操作!
如果是这样,你可以试一试:
form2.showmodel;
 
<<FORM2在AVAILABLE中,用FORM2.SHOW出错
当然出错!Form2还没Create,此时Form2 = nil;改为
Form2 := TForm2.Create(Self);
Form2.Sbow;
 
<<FORM2在AVAILABLE中,用FORM2.SHOW出错
当然要出错,Form2还没Create,此时Form2 = nil, 改为:
if not Assigned(Form2) then
Form2 := TForm2.Create(Self);
Form2.Show;
这样第2个问题也解决了
 

可将加入一个全局变量:isOpen
在form1中:
OnCreate : notOpen := true;
OnOpenForm2 :
if notOpen then
try
Form2 := TForm2.Create(self);
Form2.Show;
notopen := false;
finally
Form2.Free;
end;
在Form2:
OnClose : notOpen := True;
 
告诉我你的地址,我给你发个例子。
 
HTML都忘光了,只好输第三遍:

FORM2在AVAILABLE中,直接用FORM2.SHOW出错
当然要出错,Form2还没Create,此时Form2 = nil, 改为:
if not Assigned(Form2) then
Form2 := TForm2.Create(Self);
Form2.Show;
这样第2个问题也解决了
 
用Assigned不行;还是用全局量;或者:

function TFMain.FindChild(Form: TForm): Integer;
begin
if Form=nil then begin Result:=-1; Exit; end;
Result:=Self.MDIChildCount-1;
while (Result>-1) and (Self.MDIChildren[Result]<>Form) do Dec(Result);
end;

传递你要找的Form,如果返回是-1,则没有;反之,就是他在主Form中的索引。
 
同意CHENLILI!
 
我的EMAIL是ZWS@SOIM.NET,请GWD给我发个例子.
 
gwd:email收到,谢谢!
 
后退
顶部