比如显示一个窗体
procedure TForm1.ToolButton1Click(Sender: TObject);
var
vForm: TForm;
begin
vForm := TForm2.Create(nil);//Create(self)
vForm.ShowModal;
vForm.Free;
end;Create(nil);要手动释放,怕忘记
Create(self)的话,要等TForm1关闭才释放
一般来说 用哪个好?
procedure TForm1.ToolButton1Click(Sender: TObject);
var
vForm: TForm;
begin
vForm := TForm2.Create(nil);//Create(self)
vForm.ShowModal;
vForm.Free;
end;Create(nil);要手动释放,怕忘记
Create(self)的话,要等TForm1关闭才释放
一般来说 用哪个好?
默认
procedure TForm1.ToolButton1Click(Sender: TObject);
begin
Form2.ShowModal; 这样也可以调用啊 为什么要TForm2.Create(nil);呢?
end;是因为默认要把工程的自动创建窗体取消吗?
不取消的话 这窗体是由application释放?
from1.create(self); //由当前窗体(即Self)释放
from1.create(Application); //由程序自动处理释放问题
引用4楼
为什么要用TForm2.Create(nil);呢?
直接Form2.ShowModal; 也可以啊 那是因为你的Form2是全局变量
我正常是不用这个全局变量的,将其注释掉
//var
// Form1: TForm1;用时使用局部变量
先uses unit2;
procedure TForm1.ToolButton1Click(Sender: TObject);
var
vForm: TForm2;
begin
vForm := TForm2.Create(nil);//或self或application;
try
vForm.ShowModal;
finally
vForm.Free;
end;
end;
1.因为你在新建窗体的时候,delphi会把该窗体加入到自动创建窗体列表里。所以你直接Form2.ShowModal也可以。这个时候窗体是有Application自动释放的,也就是程序退出的时候会自动释放资源;
2.为什么要用TForm2.Create(nil); 因为可能会用不到该窗体!比如说一个大型的ERP系统,可能包含10几个甚至数十个窗体,如果都是自动创建的话,那就是说程序一启动就会自动创建这数十个窗体,这会影响系统启动速度,而且也没有必要,因为程序启动以后用户不一定会把这数十个窗体都打开看一下啊!这样就造成资源浪费了不是吗? 所以我们一般只需要自动创建主窗体,而其它窗体在需要的时候在创建,不需要的时候就释放掉~
创建用TForm2.Create(nil);
但我不注释var Form2: TForm2;
会影响效率吗?就是有全局变量var Form2: TForm2;
会影响效率不?
总之你要效率好,你就不要让窗体自动创建,TForm2.Create(nil)用这个创建窗体,完了释放;
你要怕忘记释放,你就让窗体自动创建,直接用就行了~