1个回答
展开全部
首先,需要在当前单元里uses被调用的窗体单元,例如:
uses
unit2;
然后,就是创建和操作那个窗体了,因为创建方法不同,就到到牵涉后面窗口释放问题,这里提供三种方法,具体看下面的代码和注释。
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
btn1: TButton;
btn2: TButton;
btn3: TButton;
procedure btn1Click(Sender: TObject);
procedure btn2Click(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure btn3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
// 引用另一个窗体单元, 写上面的uses里也可以
uses
Unit2;
{$R *.dfm}
// 方法1,用完就释放,开始
procedure TForm1.btn1Click(Sender: TObject);
begin
Form2 := TForm2.create(nil);
try
Form2.ShowModal;
finally
FreeAndNil(Form2);
// Form2.Free; 也可以只Free
end;
end;
// 方法1,用完就释放,结束
// 方法2,用完后在当前窗口关闭时再判断并释放,开始
procedure TForm1.btn2Click(Sender: TObject);
begin
// 由于Assigned()的判断,这种方法释放时必须使用FreeAndNil()
if Assigned(Form2) then
FreeAndNil(Form2);
Form2 := TForm2.create(nil);
try
Form2.ShowModal;
finally
end;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
// 当前窗口释放时,别忘记判断并释放被调用窗口
if Assigned(Form2) then
FreeAndNil(Form2);
end;
// 方法2,用完后在当前窗口关闭时再判断并释放,结束
// 方法3,用完后自动释放,开始
procedure TForm1.btn3Click(Sender: TObject);
begin
// 由于Assigned()的判断,这种方法释放时必须使用FreeAndNil()
// 因为要处理多次创建该窗口的情况,所以调用前还是需要手动释放的
if Assigned(Form2) then
FreeAndNil(Form2);
// 自动释放,关键在这几行
Form2 := TForm2.create(Application); // AOwner参数为Application时,表示该窗口在应用程序结束后会被释放
// Form2 := TForm2.create(Self); // AOwner参数为Self时,表示该窗口在当前窗口释放时会被释放
// Form2 := TForm2.create(nil); // AOwner参数为nil时,必须手动释放,切记!
try
Form2.ShowModal;
finally
end;
end;
// 方法3,用完后自动释放,结束
end.
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询