Delphi弹出子窗体的简单问题 Show是显示,创建是Create从字面理解就可以了 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 Form2每次用完之后关闭的时候Free掉再用Form2的时候就再次创建 Form1unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs;type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end;var Form1: TForm1;implementation uses Unit2;{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);begin Application.CreateForm(TForm2,Form2); form2.Show;end;end.====================================Form2unit Unit2;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs;type TForm2 = class(TForm) procedure FormClose(Sender: TObject; var Action: TCloseAction); private { Private declarations } public { Public declarations } end;var Form2: TForm2;implementation{$R *.dfm}procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);beginAction:=caFree; //Free掉end;end.注意Form2不要加入工程的自动创建里面program Project1;uses Forms, Unit1 in 'Unit1.pas' {Form1}, Unit2 in 'Unit2.pas' {Form2};{$R *.res}begin Application.Initialize; Application.CreateForm(TForm1, Form1);// Application.CreateForm(TForm2, Form2); 不要自动创建Form2 Application.Run;end. OnActive 是每次激活的时候。OnShow 是每次显示的时候。如果你是动态创建窗体的。就可以达到你的想法。ctrl + shift + F11 (大概),把 Auto 列表里的 Form 点到右边去。然后代码很简单。Form2 := TForm2.Create(nil);Form2.ShowModal;Form2.Free if not Assigned(Frm2) then begin Frm2:=Frm.Create(Self); end else Frm2.Show; 简单的做法,form1应用form2的单元,{工程文件中取消form2窗体的创建}program Project1; uses Forms, Unit1 in 'Unit1.pas' {Form1}, Unit2 in 'Unit2.pas' {Form2}; {$R *.res} begin Application.Initialize; Application.CreateForm(TForm1, Form1); //Application.CreateForm(TForm2, Form2); 不要自动创建Form2 Application.Run; end.{弹出form2窗体}procedure TFShopMain.miLogUserClick(Sender: TObject);begin try FLogUsers:=TFLogUsers.Create(Application); FLogUsers.ShowModal; finally FLogUsers.Free; FLogUsers:=nil; end;end;{form2中create事件自己写了} 一般创建后,不释放。下一次,打开Show就可以。 Form2是在程序开始运行的时候就被create了,并不是show的时候才临时做的。OnActivate是在该窗体成为当前活动窗体时发生的。如果Form2是用完就关掉,下次用再show出来的话,用onActivate事件会方便些。 关于组件的序列化 模式窗口问题 疑难啊 动态数组问题 teeChart 如何实现初始化状态 VB代码改DELPHI在线等待急!!! 在Delphi中,怎样调用Windows的日历和计算器? 想得到这样的数组 微软为什么不再支持MDI应用程序了呢? 大家说说看现在是学JAVA好,还是学C#啊? BalloonHint修改 IOCP中GetAcceptExSockaddrs无法返回远程IP信息
Form1
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation
uses Unit2;
{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
begin
Application.CreateForm(TForm2,Form2);
form2.Show;
end;end.====================================
Form2
unit Unit2;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;type
TForm2 = class(TForm)
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form2: TForm2;implementation{$R *.dfm}procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action:=caFree; //Free掉
end;end.注意Form2不要加入工程的自动创建里面program Project1;uses
Forms,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {Form2};{$R *.res}begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
// Application.CreateForm(TForm2, Form2); 不要自动创建Form2
Application.Run;
end.
OnShow 是每次显示的时候。
如果你是动态创建窗体的。就可以达到你的想法。
ctrl + shift + F11 (大概),把 Auto 列表里的 Form 点到右边去。
然后代码很简单。Form2 := TForm2.Create(nil);
Form2.ShowModal;
Form2.Free
if not Assigned(Frm2) then
begin
Frm2:=Frm.Create(Self);
end
else Frm2.Show;
program Project1;
uses
Forms,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {Form2};
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
//Application.CreateForm(TForm2, Form2); 不要自动创建Form2
Application.Run;
end.
{弹出form2窗体}
procedure TFShopMain.miLogUserClick(Sender: TObject);
begin
try
FLogUsers:=TFLogUsers.Create(Application);
FLogUsers.ShowModal;
finally
FLogUsers.Free;
FLogUsers:=nil;
end;
end;
{form2中create事件自己写了}
OnActivate是在该窗体成为当前活动窗体时发生的。
如果Form2是用完就关掉,下次用再show出来的话,用onActivate事件会方便些。