procedure Tform1.Button1Click(Sender: TObject); begin
if Application.MessageBox('这样就好','提示',MB_OKCANCEL)=IDOK then begin Application.CreateForm(Tform2,form2); try form2.ShowModal; finally form2.Free; end; end; end;注意:去掉IDE的窗体自动生成
! else 里写了form2.close 当然就关了呀
我也这样写的,不过点选否之后,form2照样打开了
procedure Tform1.Button1Click(Sender: TObject); begin if not Assigned(form2) then Application.CreateForm(Tform2,form2); try if Application.MessageBox('这样就好','提示',MB_OKCANCEL)=IDOK then Form2.ShowModal; finally FreeAndNil(form2); end; end;建议楼主要及时结贴!
1、先写个公用函数 function XXX.MyFindChild(MyFormName: string): Boolean; var i,j:integer; begin //查找子窗体,如果子窗体未打开返回真; //如果子窗体存在,则将其显示在最前; //如果子窗体在最小化,则将其恢复普通状态。 i:=Application.MainForm.MDIChildCount ; Result :=true; for j:=0 to i-1 do if Application.MainForm.MDIChildren[j].Name =MyFormName then begin Result :=false; Application.MainForm.MDIChildren[j].BringToFront ; if Application.MainForm.MDIChildren[j].WindowState=wsMinimized then Application.MainForm.MDIChildren[j].WindowState:= wsNormal; end;end; 2、在你要调用处写 if MyFindChild('XXXXFORM') then Application.CreateForm(TXXXXFORM, XXXXFORM);3、你的问题 procedure Txxx_Main.Button1Click(Sender: TObject); begin if Application.MessageBox('确定要打开XXXX','提示', MB_OKCANCEL +MB_SYSTEMMODAL+MB_ICONINFORMATION)=mrCANCEL then exit; if MyFindChild('XXXXFORM') then Application.CreateForm(TXXXXFORM, XXXXFORM); end;
PS:子窗体是不能用ShowModal的
再一个就是,你在窗体中的Close事件中一定要加入下列代码; procedure TXXXXFORM.FormClose(Sender: TObject; var Action: TCloseAction); begin Action:=caFree; XXXXFORM:=nil; //这句是一定要的,要不然,窗体是不会完全释放的 end;
begin
if Application.MessageBox('这样就好','提示',MB_OKCANCEL)=IDOK then
begin
Application.CreateForm(Tform2,form2);
try
form2.ShowModal;
finally
form2.Free;
end;
end;
end;注意:去掉IDE的窗体自动生成
我也这样写的,不过点选否之后,form2照样打开了
begin
if not Assigned(form2) then
Application.CreateForm(Tform2,form2);
try
if Application.MessageBox('这样就好','提示',MB_OKCANCEL)=IDOK then
Form2.ShowModal;
finally
FreeAndNil(form2);
end;
end;建议楼主要及时结贴!
function XXX.MyFindChild(MyFormName: string): Boolean;
var i,j:integer;
begin
//查找子窗体,如果子窗体未打开返回真;
//如果子窗体存在,则将其显示在最前;
//如果子窗体在最小化,则将其恢复普通状态。
i:=Application.MainForm.MDIChildCount ;
Result :=true;
for j:=0 to i-1 do
if Application.MainForm.MDIChildren[j].Name
=MyFormName then
begin
Result :=false;
Application.MainForm.MDIChildren[j].BringToFront ;
if Application.MainForm.MDIChildren[j].WindowState=wsMinimized then
Application.MainForm.MDIChildren[j].WindowState:= wsNormal;
end;end;
2、在你要调用处写 if MyFindChild('XXXXFORM') then
Application.CreateForm(TXXXXFORM, XXXXFORM);3、你的问题
procedure Txxx_Main.Button1Click(Sender: TObject);
begin
if Application.MessageBox('确定要打开XXXX','提示',
MB_OKCANCEL +MB_SYSTEMMODAL+MB_ICONINFORMATION)=mrCANCEL then exit; if MyFindChild('XXXXFORM') then
Application.CreateForm(TXXXXFORM, XXXXFORM);
end;
PS:子窗体是不能用ShowModal的
procedure TXXXXFORM.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action:=caFree;
XXXXFORM:=nil; //这句是一定要的,要不然,窗体是不会完全释放的
end;
他的窗体不是封装在DLL中吧!