delphi 窗体动态打开函数
将下面这个动态窗体打开方法改成一个通用的函数TgysForm=class(TfrmMBForm)gysForm:TgysForm;ifnotAssigned(gysfor...
将下面这个动态窗体打开方法改成一个通用的函数
TgysForm = class(TfrmMBForm)
gysForm: TgysForm;
if not Assigned(gysform) then
begin
try
gysform := Tgysform.Create(application);
gysform.ShowModal;
finally
freeAndNil(gysform);
end;
end;
procedure TfrmMain.N13Click(Sender: TObject);
begin
if not Assigned(frmChgPwd) then
begin
try
frmChgPwd := TfrmChgPwd.Create(application);
frmChgPwd.ShowModal;
finally
freeAndNil(frmChgPwd);
end;
end;
end;
这种形式希望改写成函数是这种的,单击事件里面一行代码就好了,主要是通用。
TgysForm = class(TfrmMBForm)
gysForm: TgysForm;
TkhglForm = class(TfrmMBForm)
khglForm: TkhglForm;
procedure TfrmMain.N13Click(Sender: TObject);
begin
frmShow(gysForm); //frmShow(khglForm);
end; 展开
TgysForm = class(TfrmMBForm)
gysForm: TgysForm;
if not Assigned(gysform) then
begin
try
gysform := Tgysform.Create(application);
gysform.ShowModal;
finally
freeAndNil(gysform);
end;
end;
procedure TfrmMain.N13Click(Sender: TObject);
begin
if not Assigned(frmChgPwd) then
begin
try
frmChgPwd := TfrmChgPwd.Create(application);
frmChgPwd.ShowModal;
finally
freeAndNil(frmChgPwd);
end;
end;
end;
这种形式希望改写成函数是这种的,单击事件里面一行代码就好了,主要是通用。
TgysForm = class(TfrmMBForm)
gysForm: TgysForm;
TkhglForm = class(TfrmMBForm)
khglForm: TkhglForm;
procedure TfrmMain.N13Click(Sender: TObject);
begin
frmShow(gysForm); //frmShow(khglForm);
end; 展开
3个回答
展开全部
if Form2 = nil then //为什么Form2不为空
(这个很简单,因为form2是你定义的一个局部变量,并没有给初始值,所以form2不一定为空)
Form2 := TForm2.Create(nil); //nil,self,application都有什么区别
(控件的Create构造函数,之所以有参数,是因为它们都继承自TComponent,而这个参数是表示了控件的归属,父控件会将控件从原来的父控件中删除,加入到自己的子控件列表中,对于窗体来说,这个意义不大)
Application.CreateForm(TForm2, Form2);
(至于这种创建方法,是和进程的管理方面有关系,除了可以创建窗体,当进程没有主窗体时,它会将当前创建的这个窗体设置为主窗体,当然创建的窗体,必须是从TForm继续而来的,否则不会设置的)
你的代码,一般简单的写法:
with TForm2.Create(nil) do begin
ShowModal;
Free;
end;
(这个很简单,因为form2是你定义的一个局部变量,并没有给初始值,所以form2不一定为空)
Form2 := TForm2.Create(nil); //nil,self,application都有什么区别
(控件的Create构造函数,之所以有参数,是因为它们都继承自TComponent,而这个参数是表示了控件的归属,父控件会将控件从原来的父控件中删除,加入到自己的子控件列表中,对于窗体来说,这个意义不大)
Application.CreateForm(TForm2, Form2);
(至于这种创建方法,是和进程的管理方面有关系,除了可以创建窗体,当进程没有主窗体时,它会将当前创建的这个窗体设置为主窗体,当然创建的窗体,必须是从TForm继续而来的,否则不会设置的)
你的代码,一般简单的写法:
with TForm2.Create(nil) do begin
ShowModal;
Free;
end;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
Function myFunc(gysForm:TForm):boolean;
begin
try
gysForm:=Tgysform.Create;
(gysForm as TgysForm).showModal;
except
result:=False;
FreeAndNil(gysForm);
end;
result:=True;
FreeAndNil(gysForm);
end;
begin
try
gysForm:=Tgysform.Create;
(gysForm as TgysForm).showModal;
except
result:=False;
FreeAndNil(gysForm);
end;
result:=True;
FreeAndNil(gysForm);
end;
追问
不对,你这种是要判断窗体是否打开吗?
追答
创建失败了返回false,创建成功了返回True
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
Procedure FormCreateAndShow(frm:TForm);
begin
if not Assigned(frm) then
begin
try
Frm:=TFrm.Create(application);
Frm.Showmodal;
finally
freeAndNil(frm);
end;
end;
//定义过程
//调用
procedure TfrmMain.N13Click(Sender: TObject);
begin
FormCreateAndShow(gysForm)
end;
begin
if not Assigned(frm) then
begin
try
Frm:=TFrm.Create(application);
Frm.Showmodal;
finally
freeAndNil(frm);
end;
end;
//定义过程
//调用
procedure TfrmMain.N13Click(Sender: TObject);
begin
FormCreateAndShow(gysForm)
end;
追问
Frm:=TFrm.Create(application);
TFrm编译不了[Error] UMain.pas(1042): Undeclared identifier: 'TFrm'
不知道如何解决呢。
追答
哦,我写错了
Frm:=TForm.Create(application);
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询