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);
展开
 我来答
一树一花开Cr
2010-02-23 · 超过36用户采纳过TA的回答
知道答主
回答量:76
采纳率:0%
帮助的人:0
展开全部
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;
glaciersoft
2010-02-23 · TA获得超过288个赞
知道小有建树答主
回答量:340
采纳率:0%
帮助的人:333万
展开全部
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的实体
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
冷沛裘幼荷
2019-09-23 · TA获得超过3837个赞
知道小有建树答主
回答量:3248
采纳率:34%
帮助的人:422万
展开全部
Var
f:TSomeformclass;
F:=
TSomeformclass.
create(nil);
F.show;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
testerHooK
2010-02-22 · 超过67用户采纳过TA的回答
知道小有建树答主
回答量:229
采纳率:0%
帮助的人:194万
展开全部
你这种根本就不是动态创建窗体。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式