我想知道delphi 2010中的formshow在哪里,因为我只能在我的项目中看到一个formcreate。
我问的原因是因为我需要在FormShow事件处理程序中添加Randomize,如下所示:
procedure TfrmWinnaSpree.FormShow(Sender: TObject);
begin
Randomize;
end;
我想知道delphi 2010中的formshow在哪里,因为我只能在我的项目中看到一个formcreate。
我问的原因是因为我需要在FormShow事件处理程序中添加Randomize,如下所示:
procedure TfrmWinnaSpree.FormShow(Sender: TObject);
begin
Randomize;
end;
Events
创建事件处理程序的方式与在 Delphi 中创建几乎每个事件处理程序的方式相同,方法是双击Object Inspector
.
单击表单本身(不是表单上的任何控件),然后切换到Object Inspector
. 单击Events
选项卡,然后向下滚动到OnShow
事件。双击事件名称旁边的右半部分,IDE 将创建一个新的空事件处理程序并将光标放在正确的位置开始编写代码。
procedure TForm3.FormShow(Sender: TObject);
begin
|
end;
但是,FormShow
调用 的地方是错误的Randomize
,因为FormShow
每次显示表单时都会执行,并且可能不止一次发生。这是一个示例(假设有两种形式,Form1和Form2,像往常一样在 .dpr 文件中使用默认变量名自动创建,这当然是一个坏主意 - 这是为了证明您的问题目的存在问题):
procedure TForm2.FormShow(Sender: TObject);
begin
ShowMessage('In FormShow');
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Form2.Visible := not Form2.Visible;
end;
运行程序,点击TForm1.Button1
多次;每隔一段时间,您都会看到In FormShow消息。
调用Randomize的正确位置是:
在主窗体单元的初始化部分
unit uMainForm;
interface
...
implementation
...
initialization
Randomize;
end.
在您的项目源 (.dpr) 文件中
program MyGreatApp;
uses
Math,
Vcl.Forms,
uMainForm in 'uMainForm.pas' {Form1};
{$R *.RES}
begin
Randomize;
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.Title := 'My Super App';
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
或者,您也可以覆盖受保护的方法 TForm.DoShow:
type
TForm = class(Forms.TForm)
protected
procedure DoShow; override;
end;
implementation
procedure TForm.DoShow;
begin.
// custom show code
inherited;
// custom show code
end;
与基于事件的方法相比,优势在于您可以将自定义代码放在继承的调用之前或之后。