0

我有一个疑问,

我有一个祖先窗口。在祖先窗口的打开事件中,有一个发布事件。当我们打开后代窗口时,该 postevent 将在后代窗口中工作?

请任何人对此进行解释。

注意:在后代窗口打开事件已检查扩展祖先脚本。

问候, 安巴特

4

2 回答 2

0

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

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

超级::事件打开()

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

我希望这有帮助。随意问!祝你今天过得愉快!

兄弟。加博尔

于 2013-02-26T06:49:02.443 回答
0

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

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

于 2013-02-27T23:02:13.097 回答