我想知道delphi 2010中的formhow在哪里,就像我在项目中只能看到一个formcreate一样。
我问的原因是因为我需要在FormShow事件处理程序中添加Randomize,如下所示:
procedure TfrmWinnaSpree.FormShow(Sender: TObject);
begin
Randomize;
end;
答案 0 :(得分:11)
通过双击Events
的{{1}}选项卡中的方法,创建事件处理程序的方式与在Delphi中创建几乎每个事件处理程序的方式相同。
单击表单本身(不是表单上的任何控件),然后切换到Object Inspector
。点击Object Inspector
标签,然后向下滚动到Events
事件。双击事件名称旁边的右半部分,IDE将创建一个新的空事件处理程序,并将光标放在正确的位置以开始编写代码。
OnShow
但是,procedure TForm3.FormShow(Sender: TObject);
begin
|
end;
是调用FormShow
的错误位置,因为每次显示表单时都会执行Randomize
,这可能会发生多次。这是一个示例(它假定两种形式, Form1 和 Form2 ,像往常一样在.dpr文件中使用默认变量名称进行自动处理,这当然是个坏主意 - 这个是为了证明你的问题的目的是一个问题):
FormShow
运行程序并多次点击procedure TForm2.FormShow(Sender: TObject);
begin
ShowMessage('In FormShow');
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Form2.Visible := not Form2.Visible;
end;
;每隔一次,你就会看到 In FormShow 消息。
调用 Randomize 的正确位置是:
在主表单元的初始化部分
TForm1.Button1
unit uMainForm;
interface
...
implementation
...
initialization
Randomize;
end.
答案 1 :(得分:1)
或者你也可以覆盖受保护的方法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;
与基于事件的方法相比,优势在于您可以在继承的调用之前或之后放置自定义代码。