createForm 与 Create 的区别 ( 积分: 50 )

  • 主题发起人 主题发起人 shaken
  • 开始时间 开始时间
S

shaken

Unregistered / Unconfirmed
GUEST, unregistred user!
Application.CreateForm(TloginFRM, loginFRM);
loginFRM := TloginFRM.Create(Application);
这两个语句是不是相同,如果不同,有什么区别。
目前我了解的就是:
1、loginFrm拥有者不同
2、一个是一个类的方法,一个是构造函数,不知道对不对?
请指教。因为这是一个登录窗口,我创建了之后,如果密码正确,就继续运行,生成主窗体。
loginFRM := TloginFRM.Create(Application);

if loginFRM.ShowModal = mrOK then
begin
Application.CreateForm(TForm_main, Form_main);
Application.Run;
end;
以上代码运行可以继续生成主窗体,但是用
Application.CreateForm(TloginFRM, loginFRM);
if loginFRM.ShowModal = mrOK then
begin
Application.CreateForm(TForm_main, Form_main);
Application.Run;
end;
就不行,为什么?
 
Application.CreateForm(TloginFRM, loginFRM);
loginFRM := TloginFRM.Create(Application);
这两个语句是不是相同,如果不同,有什么区别。
目前我了解的就是:
1、loginFrm拥有者不同
2、一个是一个类的方法,一个是构造函数,不知道对不对?
请指教。因为这是一个登录窗口,我创建了之后,如果密码正确,就继续运行,生成主窗体。
loginFRM := TloginFRM.Create(Application);

if loginFRM.ShowModal = mrOK then
begin
Application.CreateForm(TForm_main, Form_main);
Application.Run;
end;
以上代码运行可以继续生成主窗体,但是用
Application.CreateForm(TloginFRM, loginFRM);
if loginFRM.ShowModal = mrOK then
begin
Application.CreateForm(TForm_main, Form_main);
Application.Run;
end;
就不行,为什么?
 
form:=Tform.create(application);
application.createform(Tform,form);
 
你可以查看TApplication.CreateForm的代码.
TApplication.CreateForm会直接把第一个Form设置为MainForm并且不可改变.
因此对于你的登陆窗口,使用TLoginForm.Create(nil)比较合适
 
创建一个Form的实例用: SomeForm:=TSomeForm.Create(Application);
而不要用: TApplication.CreateForm(TSomeForm,SomeForm);
因为 TApplication.CreateForm() 会检查 MainForm 是否为 nil,如果是的话,便把新创建的 Form 作为主 Form。
 
自己也知道答案了,不过照样给分。
 
后退
顶部