Progress-4GL中事件处理的一些问题

Some questions on event handling in Progress-4GL

有人要求我在 *.w 文件的填充字段上实现事件处理程序(在 F5 的情况下,应该做一些事情)。

我开始做以下事情:

ON F5 OF particular_fill-in_Field
DO:
    ...
END.

这行不通,后来我发现源代码中已经存在以下内容:

内部包含文件:

&GLOBAL-DEFINE SEARCH-KEYBOARD "F5":u
&GLOBAL-DEFINE SEARCH-MOUSE MOUSE-SELECT-DBLCLICK

*.w 文件内:

ON {&SEARCH-KEYBOARD},{&SEARCH-MOUSE} OF particular_fill-in_Field
DO: 
...
END.

在查看进度网站时,我发现 following URL,解释 ON-语句:

ON CHOOSE OF b_next, b_prev DO:
  IF SELF:LABEL = "Next" THEN
  ...

这给我留下了一些问题:

  1. 当我添加 ON F5 行时,F5 (SEARCH-KEYBOARD) 事件有两个事件处理程序。为什么这甚至可以编译,并且在编译时,为什么它采用已经存在的代码行而不是我添加的代码行?
  2. URL 上的示例显示了如何在不同的小部件上处理相同的事件(您可以使用 SELF 对象来了解哪个小部件启动事件处理程序),但是不同的事件呢?在一个小部件上(比如在我的情况下,ON {&SEARCH-KEYBOARD},{&SEARCH-MOUSE} OF ...),我可以知道触发了哪个事件,SEARCH-KEYBOARDSEARCH-MOUSE

根据您指向的文档注释:

*A trigger defined with the ON statement remains in effect until one of the following occurs: *Another ON statement defines another trigger (or REVERT) for the same event and widget

所以,如果我没看错的话,last ON 获胜,所以我猜你的 ON 在另一个 ON 之后。

您可以使用LAST-EVENT系统句柄的LABEL attribute获取事件。

Dominique 编辑以供参考

示例:

ON {&SEARCH-KEYBOARD},{&SEARCH-MOUSE} OF particular_fill-in_Field
DO: 
    MESSAGE "The launched event is [" LAST-EVENT:LABEL "]" VIEW-AS ALERT-BOX.
    ...
END.