Delphi onCreate不是第一个事件

Delphi onCreate不是第一个事件,delphi,jedi,Delphi,Jedi,我使用一张上面有绝地JVWizard(3.50版)的表格。我想在oncreate事件中做一些初始化工作,因为我认为这将是创建表单()后的第一个事件。但是我发现welcomepage(页面列表中的第一页)事件的onenterpage事件是在oncreate事件之前触发的。我想知道出了什么问题。表单的事件顺序不是绝对确定的。或者更确切地说,表单的事件由表单决定,但这并不保证与其他组件触发的事件有关 表单的OnCreate事件在表单构造完成后,在该表单上的任何和所有组件和控件都已初始化后调用 如果这些

我使用一张上面有绝地JVWizard(3.50版)的表格。我想在oncreate事件中做一些初始化工作,因为我认为这将是创建表单()后的第一个事件。但是我发现welcomepage(页面列表中的第一页)事件的onenterpage事件是在oncreate事件之前触发的。我想知道出了什么问题。

表单的事件顺序不是绝对确定的。或者更确切地说,表单的事件由表单决定,但这并不保证与其他组件触发的事件有关

表单的OnCreate事件在表单构造完成后,在该表单上的任何和所有组件和控件都已初始化后调用

如果这些组件或控件触发任何事件,则这些事件可能发生在表单OnCreate事件本身之前

在您的情况下,由于您使用的是JvWizard组件和控件,因此如果在设计时将这些控件和组件放置在表单上,则在运行时加载和初始化这些控件和组件所触发的任何事件都将发生在表单OnCreate事件之前

OnEnterPage事件就是其中之一,由JvWizard在初始化和建立第一页时触发

如果不确切了解您试图执行的初始化的细节,就不可能说出在您的情况下正确的解决方案是什么

它可能只是稍后执行表单初始化,例如响应formsOnShow事件

也可以将部分(或全部)初始化移动到向导OnEnterPage本身

或者,可以将初始化作为虚拟创建构造函数的重写来实现

重写构造函数本身将使您能够在调用继承的构造函数之前执行一些初始化(初始化表单内容并最终调用OnCreate),并在调用继承的构造函数之后执行一些初始化(这将在任何表单OnCreate事件处理程序之后运行)


希望通过了解正在发生的事情,您能够在您的案例中确定适当的方法。

表单的事件顺序不是绝对确定的。或者更确切地说,表单的事件由表单决定,但这并不保证与其他组件触发的事件有关

表单的OnCreate事件在表单构造完成后,在该表单上的任何和所有组件和控件都已初始化后调用

如果这些组件或控件触发任何事件,则这些事件可能发生在表单OnCreate事件本身之前

在您的情况下,由于您使用的是JvWizard组件和控件,因此如果在设计时将这些控件和组件放置在表单上,则在运行时加载和初始化这些控件和组件所触发的任何事件都将发生在表单OnCreate事件之前

OnEnterPage事件就是其中之一,由JvWizard在初始化和建立第一页时触发

如果不确切了解您试图执行的初始化的细节,就不可能说出在您的情况下正确的解决方案是什么

它可能只是稍后执行表单初始化,例如响应formsOnShow事件

也可以将部分(或全部)初始化移动到向导OnEnterPage本身

或者,可以将初始化作为虚拟创建构造函数的重写来实现

重写构造函数本身将使您能够在调用继承的构造函数之前执行一些初始化(初始化表单内容并最终调用OnCreate),并在调用继承的构造函数之后执行一些初始化(这将在任何表单OnCreate事件处理程序之后运行)


希望在了解情况后,您能够在您的案例中确定适当的方法。

我不知道组件在oncreate之前已初始化,非常有价值的信息我不知道组件在oncreate之前已初始化,非常有价值的信息
constructor TMyForm.Create(Owner: TComponent);
begin
  // Perform initialization BEFORE calling inherited and 
  //  BEFORE any components or controls have initialised and
  //  triggered any of their events.
  //
  // But remember:  At this point there are no form contents loaded!
  //  As a result the amount of useful initialization you can do
  //  here may be limited.

  // ..

  inherited Create(Owner);

  // Perform further initialization here ...
  //
  // At this point form contents (controls/components) have been
  //  loaded and any events have been triggered and handled,
  //  including FormCreate.  Any code here might even be better
  //  left to run in the FormCreate event handler.
end;