Delphi7如何新建一个form

在button的click事件中。。
2025-05-11 21:01:50
推荐回答(1个)
回答(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.