在delphi中创建表单

时间:2012-01-03 11:31:34

标签: delphi

我正在使用Delphi 7并尝试在Main Form上创建具有5个按钮的Delphi应用程序。每个按钮单击将显示另一个表单,其中包含一些组件。所有按钮单击的子窗体上的大多数组件都是相同的。哪种方式更好:

  1. 在每次点击时创建新表单,并在关闭时将其销毁

  2. 创建一个表单并为其他表单使用相同的表单(直接使用ShowModal)?

  3. 但是第二个选项中的问题是当我第二次显示该子表单时,表单的值保持与第一次输入时相同。任何解决方案快速刷新?或任何其他显示形式的解决方案?

2 个答案:

答案 0 :(得分:2)

问题是,当您将这些表单添加到应用程序时,这些表单已经自动创建。您只需创建其中一个,并删除其自动创建。

转到项目>选项>表单选项卡,然后查看“自动创建表单”列表。从此列表中删除您的子表单(将其添加到“可用表单”右侧的列表中)。

现在,如果要将它们显示为模态,则不需要创建5种不同的形式。你只需要一个......

<强> 1单元

5 TButton个控件,都共享相同的ButtonClick事件(对于此示例)以及您希望的其他任何控件...

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

uses
  Unit2;

procedure TForm1.ButtonClick(Sender: TObject);
var
  F: TForm2; //Declaration of the form
begin
  F:= TForm2.Create(nil); //Creation of the form
  try
    F.ShowModal;
  finally
    F.Free; //Destruction of the form
  end;
end;

end.

请注意,我从未引用名称Form2。相反,我只是在我需要的时间内暂时声明F: TForm2。如果它不是模态的,你需要一种截然不同的方法。

答案 1 :(得分:-2)

如果所有按钮都相同,请将该子表单放入自动创建列表。在子窗体的单元文件中定义一个名为“resetField”的函数。在调用showModal函数之前,调用该子表单的resetField函数。因此,每次都使用默认值之前的表单。