一个函数完成窗体的创建->显示->释放->置nil,请给出最优方案及名字 (30分)

  • 主题发起人 主题发起人 goaha
  • 开始时间 开始时间
G

goaha

Unregistered / Unconfirmed
GUEST, unregistred user!
我在一个公用单元里定义了一个函数,这个函数完成窗体的创建->显示->释放->置nil
我打算以后大量使用该函数处理窗体的显示及释放,现在征求更好的方案及函数的名字。
给出源代码:
unit Upub;

interface

uses
forms,Classes;

function frmcsf(C:TComponentClass;var F): Integer;//函数声明
//请大家给frmcsf改成一个更好的名字

implementation

function frmcsf(C:TComponentClass;var F):Integer;
//函数定义
begin
result:=0;
try
if not Assigned(TComponent(F)) then
Application.CreateForm(C,F);
Tform(F).ShowModal;
finally
Tform(F).Free;
Tform(F):= nil;
end;
result:=1;
end;

end.


调用函数代码范例:
procedure TForm1.Button1Click(Sender: TObject);
begin
frmcsf(Tform2,form2);
//这里完成了form2的创建->显示->释放->置nil
end;



 
就这个呀
我以为什么呀
我倒
 
with tformtest.create(nil) do
begin
try
showmodal;
finally
free;
end;
end;
 
to cjf:
我的目的在于提高代码的重用性
“with tformtest.create(nil) do
begin
try
showmodal;
finally
free;
end;
end; "
的代码量是“frmcsf(Tform2,form2); ”的3倍以上,如果一个工程有几十个窗体打开及关闭
我的方案显然节省很多代码行。

to lanjiancn
我倒你XXX
我希望人与人之间,多一分鼓励,少一分冷嘲热讽
 
好东东,正是我要找的,呵呵
 
不错,好想法。
对于单个窗体我是用类似于Dialog.Execute的方法来实现社会公窗口的创建与释放的。
TForm
function Execute(sth): Boolean;
end;
var
Form: TForm;

function TForm.Execute(sth): Boolean;
begin
with Form := TForm.Create(nil) do begin
....
showmodal;
Close;
Free and nil;
end;
end;
 
使用TFormClass。
procedure ShowForm(Form: TFormClass);
begin
with Form.Create(Application) do
try
ShowModal;
finally
Free;
end;
end;
 
1、result:=Tform(F).ShowModal 更好,这样外面可以知道form的结果
2、假如传入的F是nil的,最后才free,如果传入的非nil,那么也不要free,这样才比较符合谁创建谁free的习惯
 
多人接受答案了。
 
后退
顶部