每个人都知道为什么在Form.shate之前调用Form.show,如果属性Form.visible = true。
我在Delphi XE7和Delphi 10 Seattle(为Windows编译的Fmx表单)中进行了测试
例:
procedure TForm1.FormCreate(Sender: TObject);
var
i : integer;
begin
//break point here is called before if form.visible = false
i := 0;
end;
procedure TForm1.FormShow(Sender: TObject);
var
i : integer;
begin
//break point here is called before if form.visible = true
i := 0;
end;
答案 0 :(得分:10)
如果主窗体未设置为在设计器中可见,那么调用CreateMainForm()
将强制窗体在构造完成后显示(因此之后 OnCreate
已经解雇了。
procedure TApplication.CreateMainForm;
var
I: Integer;
begin
if FMainForm = nil then
begin
// here creating form...
end;
if FMainForm <> nil then
FMainForm.Visible := True; //** force visible here
end;
否则,表单的Visible
属性在调用TCommonCustomForm.Loaded()
期间设置,在表单构造期间由DFM流系统调用,因此当表单变得可见时触发OnShow
。 构建完成后,在流式传输之后才会调用OnCreate
。
最重要的是,你不应该假设这些事件何时会被执行。如果您需要控制事情发生的顺序,您需要明确地执行此操作。