一个窗口上的多个dw的Construct 事件有先后顺序吗?

时间:2021-12-25 20:21:42
在一个窗口上,有2个以上的dw,每个dw中的Constuct事件都有代码,当窗口打开时,Construct事件的执行顺序好象是不一样的。在程序中,要求Construct事件按一定的顺序执行;
比如,窗口上有两个dw(dw_1,dw_2),我要求,先执行完dw_1中的Construct事件,再执行dw_2中的Construct事件,因为dw_2中的Construct要用到dw_1中Construct的结果.

问题是:如何控制这些DW中的Construct事件的顺序。

22 个解决方案

#1


实例变量。

#2


好像不能更改,所以最好不要用Construct事件.
自定义dw的初始化事件吧,在窗口的open事件中顺序调用,这样便于控制,例如
dw_1.event ue_initialize()
dw_2.event ue_initialize()

#3



自定义dw的初始化事件吧,在窗口的open事件中顺序调用,这样便于控制,例如
dw_1.event ue_initialize()
dw_2.event ue_initialize()
程序都清晰、模块些。

#4


建议:把dw_1,dw_2的Construct事件的代码都放到一个函数里面,如wf_xxx()
然后在FORM的OPEN事件中调用此wf_xxx(),这样灵活性更强些;

#5


这样你想把这些代码怎么顺序摆放都应该没有问题;

#6


不错,上面各位的方法我想应该可以,但我参考了一下PFC中的例程:
它既没有定义实例变量,也没有用自定义事件或函数,而是直接在DW的Construct事件中写的代码,但它每次都能控制Construct事件按顺序执行。
dw_1 -> dw_2 -> dw_3
====================================
大家可参考PFC example中的w_linkagescroll,w_linkageRetrieve,w_linkageFilter等等窗口;
这几个窗口都有一个共同的特征,就是(假设)dw_2 的Construct事件要用到 dw_1的Construct事件的结果。

是否还有其它技巧?

结贴时再加分!!

#7


他的dw应该是按3,2,1的顺序建立的吧,constructor应该是后建先触发的顺序.

#8


to: pufan()

不错,好象是这样,即按后建先触发的顺序,我后来重新按倒序(3,2,1)的顺序建了数据窗口,就能按 1,2,3的顺序执行了。

#9


也不知道到底是什么原因,哪位知道的话,肯不肯出来讲一下。

#10


up

#11


在CONTROL LIST 里面更改DW的摆放顺序就可以实现了
先点选DW然后ANCESTOR就可以实现更改了

呵呵
很好玩,兄弟,以后多发现一些这样的偏问题供大家讨论,谢谢

#12


更正:是改变TAB顺序来修改执行顺序的

#13


可以在控件上点右键选择SEND TO BACK或者BRING TO FRONT来改变TAB顺序,具体修改搜寻中。。。

#14


to:louisa5155(蓝色城堡) 更正:是改变TAB顺序来修改执行顺序的
========================
如果修改tab order 的值 是无法实现 事件执行的先后顺序的。

SEND TO BACK或者BRING TO FRONT 好象只是置放控件的前后顺充,对事件执行的先后顺序也没有影响.

#15


把dw所在窗口的语法导出来,找到this.Control[] = {。。。}在{}中你会看到his.dw_2,&this.dw_1,将dw_1与dw_2互换,然后保存,最后导入窗口所在PBL就可以了

#16


to: caic(猜猜) 
导出 *.srw,用ultraedit 打开,找不到 this.Control[] 

用editsource 打开,也找不到.

#17


用ultraedit 打开,有啊!

#18


用ultraedit 打开,有啊!注意去掉空格

#19


是有,
不错,PB按创建控件的先后排序顺序,倒着排。比如,如果创建控件的顺序是
dw_master -> dw_detail -> st_1
则排序为 st_1 -> dw_detail -> dw_master
在窗口源文件中:
this.Control[iCurrent+1]=this.st_1
this.Control[iCurrent+2]=this.dw_detail
this.Control[iCurrent+3]=this.dw_master
=================
TMD,原来这样,想了好长时间,原来如此.

#20


呵呵,有意思,
楼主千方百计寻找问题根源,最终功夫不负有心人,找到了答案;
楼上的高手千方百计用别的方法控制顺序,也都各有各的办法。

最后是大家都解决了各自的问题,呵呵,好一个八仙过海……

然后是我,又多了点见识,呵呵,多谢多谢……

#21


我用的是PB8,你用的是不是pb6?语法有点出入!

#22


PB8.0.3 9704

#1


实例变量。

#2


好像不能更改,所以最好不要用Construct事件.
自定义dw的初始化事件吧,在窗口的open事件中顺序调用,这样便于控制,例如
dw_1.event ue_initialize()
dw_2.event ue_initialize()

#3



自定义dw的初始化事件吧,在窗口的open事件中顺序调用,这样便于控制,例如
dw_1.event ue_initialize()
dw_2.event ue_initialize()
程序都清晰、模块些。

#4


建议:把dw_1,dw_2的Construct事件的代码都放到一个函数里面,如wf_xxx()
然后在FORM的OPEN事件中调用此wf_xxx(),这样灵活性更强些;

#5


这样你想把这些代码怎么顺序摆放都应该没有问题;

#6


不错,上面各位的方法我想应该可以,但我参考了一下PFC中的例程:
它既没有定义实例变量,也没有用自定义事件或函数,而是直接在DW的Construct事件中写的代码,但它每次都能控制Construct事件按顺序执行。
dw_1 -> dw_2 -> dw_3
====================================
大家可参考PFC example中的w_linkagescroll,w_linkageRetrieve,w_linkageFilter等等窗口;
这几个窗口都有一个共同的特征,就是(假设)dw_2 的Construct事件要用到 dw_1的Construct事件的结果。

是否还有其它技巧?

结贴时再加分!!

#7


他的dw应该是按3,2,1的顺序建立的吧,constructor应该是后建先触发的顺序.

#8


to: pufan()

不错,好象是这样,即按后建先触发的顺序,我后来重新按倒序(3,2,1)的顺序建了数据窗口,就能按 1,2,3的顺序执行了。

#9


也不知道到底是什么原因,哪位知道的话,肯不肯出来讲一下。

#10


up

#11


在CONTROL LIST 里面更改DW的摆放顺序就可以实现了
先点选DW然后ANCESTOR就可以实现更改了

呵呵
很好玩,兄弟,以后多发现一些这样的偏问题供大家讨论,谢谢

#12


更正:是改变TAB顺序来修改执行顺序的

#13


可以在控件上点右键选择SEND TO BACK或者BRING TO FRONT来改变TAB顺序,具体修改搜寻中。。。

#14


to:louisa5155(蓝色城堡) 更正:是改变TAB顺序来修改执行顺序的
========================
如果修改tab order 的值 是无法实现 事件执行的先后顺序的。

SEND TO BACK或者BRING TO FRONT 好象只是置放控件的前后顺充,对事件执行的先后顺序也没有影响.

#15


把dw所在窗口的语法导出来,找到this.Control[] = {。。。}在{}中你会看到his.dw_2,&this.dw_1,将dw_1与dw_2互换,然后保存,最后导入窗口所在PBL就可以了

#16


to: caic(猜猜) 
导出 *.srw,用ultraedit 打开,找不到 this.Control[] 

用editsource 打开,也找不到.

#17


用ultraedit 打开,有啊!

#18


用ultraedit 打开,有啊!注意去掉空格

#19


是有,
不错,PB按创建控件的先后排序顺序,倒着排。比如,如果创建控件的顺序是
dw_master -> dw_detail -> st_1
则排序为 st_1 -> dw_detail -> dw_master
在窗口源文件中:
this.Control[iCurrent+1]=this.st_1
this.Control[iCurrent+2]=this.dw_detail
this.Control[iCurrent+3]=this.dw_master
=================
TMD,原来这样,想了好长时间,原来如此.

#20


呵呵,有意思,
楼主千方百计寻找问题根源,最终功夫不负有心人,找到了答案;
楼上的高手千方百计用别的方法控制顺序,也都各有各的办法。

最后是大家都解决了各自的问题,呵呵,好一个八仙过海……

然后是我,又多了点见识,呵呵,多谢多谢……

#21


我用的是PB8,你用的是不是pb6?语法有点出入!

#22


PB8.0.3 9704