Delphi动态创建窗体
新建了两个窗体form1和form2,在Project->Options里面将form2设置为Availableforms,在form1中添加一个button1,运行如下...
新建了两个窗体form1和form2,在Project->Options里面将form2设置为Available forms,在form1中添加一个button1,运行如下代码:
uses Unit2;
procedure TForm1.Button1Click(Sender: TObject);
var
Form2:TForm2;
begin
if Form2 = nil then //为什么Form2不为空
begin
showMessage('show');
Form2 := TForm2.Create(nil); //nil,self,application都有什么区别
Form2.ShowModal;
Form2.Free;
Form2 := nil;
end;
end;
上面的动态创建窗体的方法和下面的有什么区别
Application.CreateForm(TForm2, Form2); 展开
uses Unit2;
procedure TForm1.Button1Click(Sender: TObject);
var
Form2:TForm2;
begin
if Form2 = nil then //为什么Form2不为空
begin
showMessage('show');
Form2 := TForm2.Create(nil); //nil,self,application都有什么区别
Form2.ShowModal;
Form2.Free;
Form2 := nil;
end;
end;
上面的动态创建窗体的方法和下面的有什么区别
Application.CreateForm(TForm2, Form2); 展开
4个回答
展开全部
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;
展开全部
procedure TForm1.Button1Click(Sender: TObject);
//var
// Form2:TForm2; 这里可以不定义,因为在Unit2有定义的;如果定义的话说一定不存在form2这个变量对应的实体的
begin
if not Assigned(Form2) then //如果Form2不存在的话
begin
showMessage('show');
Form2 := TForm2.Create(nil);
//nil,self,application都有什么区别?
//这里指的是Form2被谁所拥有,nil的话就是没有谁拥有form2,如果self的话则是当前窗体Form1拥有form2,App的话同理
Form2.ShowModal;
Form2.Free;
Form2 := nil;
end;
end
代码改进下:
procedure TForm1.Button1Click(Sender: TObject);
begin
with TForm2.Create(Application) do
begin
ShowModal;
Free;
end;
end;
这样也是创建Form2的实体
//var
// Form2:TForm2; 这里可以不定义,因为在Unit2有定义的;如果定义的话说一定不存在form2这个变量对应的实体的
begin
if not Assigned(Form2) then //如果Form2不存在的话
begin
showMessage('show');
Form2 := TForm2.Create(nil);
//nil,self,application都有什么区别?
//这里指的是Form2被谁所拥有,nil的话就是没有谁拥有form2,如果self的话则是当前窗体Form1拥有form2,App的话同理
Form2.ShowModal;
Form2.Free;
Form2 := nil;
end;
end
代码改进下:
procedure TForm1.Button1Click(Sender: TObject);
begin
with TForm2.Create(Application) do
begin
ShowModal;
Free;
end;
end;
这样也是创建Form2的实体
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
Var
f:TSomeformclass;
F:=
TSomeformclass.
create(nil);
F.show;
f:TSomeformclass;
F:=
TSomeformclass.
create(nil);
F.show;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你这种根本就不是动态创建窗体。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询