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