从PowerBuilder查询Ancestor中的PostEevent

时间:2013-02-26 05:06:03

标签: powerbuilder

我有一个查询,

我有一个祖先窗口。在祖先窗口的开放事件中有一个帖子事件。当我们打开后代窗口时,那个postevent会在后代窗口中工作吗?

请有人解释一下。

注意:在后代窗口中,open事件已检查扩展的祖先脚本。

此致 Ambat

2 个答案:

答案 0 :(得分:0)

在PowerBuilder中,首先从祖先调用事件。那么假设你有w_grandfather => w_father => w_child,其中w_grandfather是基类(祖先)。首先,w_grandfathers事件将在那之后w_father的事件发生后触发。

如果您取消选中扩展祖先脚本,例如在w_father,并且您在那里写了一个脚本,那么w_grandfathers事件将不会触发。第一个w_fathers事件将会触发,然后是w_child。在这种情况下,如果你想调用w_grandfather的事件,你必须明确地编写如下代码:

super :: event open()

另请注意,当您使用postevent时,您的事件将在事件列表中的最后一个事件之后触发。如果你需要“随意开火”:),你需要使用触发事件。

我希望这会有所帮助。随意问!祝你有愉快的一天!

溴。的Gabor

答案 1 :(得分:0)

无论方法是事件还是函数,无论是直接调用还是发布,PowerBuilder都会首先在实例化的对象(即后代)中搜索该方法。如果找到匹配的脚本方法,PowerBuilder将执行它。如果找不到该方法,PowerBuilder将搜索祖先链,直到找到匹配的脚本方法。重要的是要理解找到的第一个脚本方法是将要执行的内容,而不是其他内容。 PowerBuilder通过其“Extend Ancestor”功能使事件变得混乱。如果查看导出的语法,您将看到如果选中此复选框,PowerBuilder将使用call语法在脚本开头插入对直接祖先的调用。这就是DARKinVADER在他说首先从祖先调用事件时所指的。您应该明白,这只会发生,因为默认情况下,每个后代脚本都在调用它的直接祖先。如果在祖父的脚本中放置断点,您将在调用堆栈中看到所有脚本化的后代方法。

由于PowerBuilder在幕后插入对祖先的调用,许多开发人员没有意识到,当您扩展事件时,您将对ancestorreturnvalue负责。如果您对ancestorreturnvalue没有做任何事情,它将会丢失。你可以用这种方式打破框架。例如,您可以通过扩展u_dw的事件而不是正确处理ancestorreturnvalue来中断PFC链接服务。