MDI子窗口(100分)

  • 主题发起人 主题发起人 laisweet
  • 开始时间 开始时间
L

laisweet

Unregistered / Unconfirmed
GUEST, unregistred user!
如何让MDI子窗体只能打开一个(次),谢谢
 
if not Assigned(Form1) then
Form1:=TForm1.Create(Application)
else
Form1.BringToFront;
 
可是关闭子窗口后,却不能再次打开,为什么?
 
在Form1 的Close 事件中加一句:

Form1:=nil;
 
function TMain.ExistsForm(MDIFormCaption:String):boolean;
var
i:byte;
begin
result:=true;
for i:=0 to MDIChildCount-1 do
begin
if MDIChildren.Caption=MDIFormCaption
then
result:=false;
end;
end;

procedure Tmain.sysExecute(Sender: TObject);
begin
if ExistsForm('题库维护') then
begin
Application.CreateForm(Tform3, form3);
form3.show;
end else form3.show;
end;
 
"玩命"的方法,我已经用过,我想应该有类似onlyonekgx说的办法
 
在Form1 的Close 事件中加一句:

Form1:=nil;
 
onlyonekgx兄台,你试过了吗?还是出错。
是这样的,我做一个Mdi程序,其中的一个子窗口不能打开多个,
主窗口中定义变量f1:TForm1;
在子窗口的close 时间中执行action := cafree;self = nil;
按钮的click中执行:
if not assigned(f1) then
begin
f1:=tform1.create(self);
f1.show;
end
else
f1.bringtofront;


对吗?第二次点击时出错
 
for i := 0 to MainForm.MDIChildCount - 1 do
begin
if not MainForm.MDIChildren.Active then
MainForm.MDIChildren.Show
else
Exit;
end;
 
你根本不用在主窗口中定义变量f1:TForm1;

因为Form1已经是全局变量了,

self = nil; 改成
Form1:=nil;




 
因为我有多个功能共用一个子窗口,所以定义了3个变量f1,f2,f2:Tform1;
 
那你还必须在Form1
里定义一个Public变量,比如iFormType
用来跟踪f1,f2,f3
if not Assigned(F2) then begin
F2:=TForm2.Create(Application);
F2.iFormType:=1;
F2.Show;
end else
F2.BringToFront;

Close事件;
Action:=caFree;
Case iFormType of
1:f2:=nil;
end;



 
多人接受答案了。
 
后退
顶部