我正在使用Delphi 7并尝试在Main Form上创建具有5个按钮的Delphi应用程序。每个按钮单击将显示另一个表单,其中包含一些组件。所有按钮单击的子窗体上的大多数组件都是相同的。哪种方式更好:
在每次点击时创建新表单,并在关闭时将其销毁
或
创建一个表单并为其他表单使用相同的表单(直接使用ShowModal
)?
但是第二个选项中的问题是当我第二次显示该子表单时,表单的值保持与第一次输入时相同。任何解决方案快速刷新?或任何其他显示形式的解决方案?
答案 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函数。因此,每次都使用默认值之前的表单。