关于form.create(nil)?(100分)

  • 主题发起人 主题发起人 轻音乐
  • 开始时间 开始时间

轻音乐

Unregistered / Unconfirmed
GUEST, unregistred user!
form1作为登录界面,之后显示主界面。我想在显示主界面后free掉form1,不知如何写。
我在form1里写
if form2<>nil then form2:=tform2.create(nil);
form2.show;
可是form1关闭的时候form2也关闭了,请帮助。
 
你试用这种方法:
try
.....
if form2<>nil then
form2:=tform2.create(nil);
form2.show;
.....
finally
form1.free;
end;
 
不要用 Form1 做登陆界面,Form1 作为主界面,Form2 作为登陆界面即可
因为 Form1 是 MainForm,MainForm 释放了,程序就结束了:)

问题是如何在 Form1 之前显示 Form2,在工程文件(*.dpr)中:

program Project1;

uses
Forms,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {Form2};

{$R *.res}
var
Form2: TForm2;
begin
Application.Initialize;
Form2 := TForm2.Create(nil);
if Form2.ShowModal = 1 then
Application.CreateForm(TForm1, Form1);
Form2.Free;
Application.Run;
end.
 
beta 说得对呀!
 
beta 说得对呀!
 
谁做登陆界面都可以,只是不要将它做主窗口.
可以在主窗口的FORMCREATE事件中创建登陆窗口,并调用SHOW显示它.或者在DPR工程文件中
program Project1;

uses
Forms,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {Form2};

{$R *.res}
var
Form1: TForm1;
begin
Application.Initialize;
Form1 := TForm1.Create(nil);
if Form1.ShowModal = mrOK then
Application.CreateForm(TForm2, Form2);
Form1.Free;
Application.Run;
end.
 
beta:你好,我试了你的方法,可是关闭了form2程序就退出了,
怎么通过form2显示form1,能在写详细些吗
 
在Form2的Create事件中显示Form1就可以了

procedure TForm2.OnCreate(...)
begin
...
Show;
Form1:=TForm1.Create(nil);
Form1.ShowModal;
Form1.Free;
...
end;
 
用peng_qs的就可以了,再改一改:
if Form1.ShowModal = mrOK then
Application.CreateForm(TForm2, Form2);
Form1.Free;
Application.Run;
改为:
if Form1.ShowModal = mrOK then
begin
Application.CreateForm(TForm2, Form2)
Form1.Free;
Application.Run;
end
else
Application.Terminate
//注:mainform是form2;
 
to 轻音乐:
1.确保登录窗体不是主窗体。
2.如果你是靠模式值辨断的话在模式按钮中不要出现CLOSE(关闭窗体的语句)不然
他的模式值不可能会是MROK(=1如果写在工程文件中不能写MROK因为该常量没有定义)

针对上面的回答在工程文件中有必要声明一个窗体变量吗?不知道是不是多余或另有
它用。迷惑。
 
to: 大家 form2是mainform;
========================
program Project1;

uses
Forms,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {Form2};

{$R *.res}
var
Form1: TForm1;
begin
Application.Initialize;
Form1 := TForm1.Create(nil);
if Form1.ShowModal = 1 then
Application.CreateForm(TForm2, Form2);
Form1.Free;
Application.Run;
end.
==============================================
这样出错:
procedure TForm1.Button1Click(Sender: TObject);
begin
form2.ShowModal;
end;
如何显示mainform呀?
 
用 Form2:= TForm2.Create(nil) 是可以的,不过释放应该用 Release 方法。
 
你写的不大妥当把?
首先 Form1.ShowModal 了,Form1不关闭程序就不会继续执行。
所以在Form1里面如果登陆信息正确想继续程序只需把Form1.Close,
如果你认为登陆信息不正确只需Application.Terminate
 
==============================================
这样出错:
procedure TForm1.Button1Click(Sender: TObject);
begin
form2.ShowModal;
end;
如何显示mainform呀?
mainform是不用你写显示代码的,
Application.CreateForm(TForm2, Form2);
之后会自动显示,
我不知道你为什么在form1中有个按钮用来显示mainform
 
hehe, 问题出在作为登陆界面的 Form2
既然你的 Form2 是登陆界面,那么就有可能登陆失败,这是就不应该显示主窗口
这就是 if Form2.ShowModal = 1 then Application.CreateForm(TForm1, Form1);
的意思,就是说如果 Form2 返回 1 则代表登陆成功,才显示主窗口 Form1,否则
就不显示。
你说 Form2 关闭过后没有显示主窗口,是因为其默认得 ModalResult 为 0
你只要在 Form2 的 OnClose 中设置 ModalResult 为 1,则自动就会显示 Form1 了
不需要再另外加代码显示 Form1 :)

 
谢谢各位,好使了。
========================
program Project1;

uses
Forms,
Unit1 in 'Unit1.pas' {Loginform},
Unit2 in 'Unit2.pas' {Mainform};

{$R *.RES}

var
Loginform: TLoginform;
begin
Application.Initialize;
Loginform := TLoginform.Create(nil);
if Loginform.ShowModal = 1 then
Application.CreateForm(TMainform, Mainform);
Loginform.Free;
Application.Run;
end.
=============================
procedure TLoginform.Button1Click(Sender: TObject);
begin
Close;
end;

procedure TLoginform.FormClose(Sender: TObject; var Action: TCloseAction);
begin //成功
ModalResult:=1;
end;

procedure TLoginform.Button2Click(Sender: TObject);
begin //不成功
application.Terminate;
end;
===============================
不知道分应该怎么分呀? :)
 
多人接受答案了。
 
后退
顶部