为什么query的afteropen事件比form.create的事件更好发生?Delphi的各个对象的事件的执行顺序是怎样的?如何初始化程序里的变量? (10

  • 主题发起人 主题发起人 DT
  • 开始时间 开始时间
D

DT

Unregistered / Unconfirmed
GUEST, unregistred user!
为什么query的afteropen事件比form.create的事件更好发生?Delphi的各个对象的事件的执行顺序是怎样的?如何初始化程序里的变量? (100分)<br />一个delphi程序运行时所触发的事件的先后顺序。
我特不明白,为什么query的afteropen事件会比它所在的form的create事件还早发生???
如何初始化程序里的各个变量和对象?
 
不是吧,应该是在Show之前吧
你 在afteropen 中if Assigned(窗体) then实施
 
我的变量是在form的create里初始化的,可是用F7跟踪才发现,是afteropen先执行了,
要不然我怎么会这么惨,一加一段程序就死了。
 
你什么时候open的,是在窗体的oncreate吗
 
不是,是另一个query的afteropen里让这个query.open的.
而那个query是自动打开的(原来设计时就是active的)。
 
而且我觉得,应该有一个事件是最先执行的吧,那个事件是哪个呢?
在那个事件里进行初始化是最好的吧。
 
同时,由于delphi在建立一个变量时没有初始化,要人工初始化。
所以如果在afteropen里初始化,那在后面的afteropen里如何判断是否已经初始化过了?
 
呵呵,不奇怪呀,
FormCreates事件是在TForm的创建时候被触发的,
TFrom的Create的时候,先分配本身的内存,然后把本身所包含的控件一个个创建出来
并初试化(如你设的把表的属性设成Active则此时把表打开,并触发了AferOpen事件)
最后触发FormCreate事件。
 
不过,真的不行 ,我跟踪了一下,确实是query1的afteropen先执行了,而form.oncreate
是后面才执行的,所以才会导致变量未初始化。这个我真的搞不懂,到底是怎样一种
事件触发顺序呢?望大家赐教。
 
注意,我的Tquery是设计时就打开了(active为true)。是不是跟这个有关,
所以在form的create之前,Tquery就已经执行了?
 
form在create的过程中create属下的各个控件
装入各个控件的属性值,因为query.active:=true,设置这个属性的时候打开了query
最后全部属下的create完了,form自己也create完了,就触发OnCreate
 
你说对了,就是和这个有关。
Form的OnCreate事件是在Form已经创建后才执行,如果要先于创建执行,则需要使用constructure Create……
所以说,并不是在Form的Create以前执行了Query.Open,而是在Form的OnCreate事件执行以前执行了的
 
也就是说,当Query的active设成true时就执行query的create事件?
 
同意PiPi
form在create的过程中create属下的各个控件
装入各个控件的属性值,因为query.active:=true,设置这个属性的时候打开了query
最后全部属下的create完了,form自己也create完了,就触发OnCreate
 
多人接受答案了。
 

Similar threads

后退
顶部