【问题标题】:Some questions on event handling in Progress-4GLProgress-4GL中事件处理的一些问题
【发布时间】:2020-12-30 12:32:50
【问题描述】:

我被要求在 *.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-statement:

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

【问题讨论】:

    标签: event-handling openedge progress-4gl


    【解决方案1】:

    从您指向的文档的注释中:

    *使用 ON 语句定义的触发器一直有效,直到发生以下情况之一: *另一个 ON 语句为同一事件和小部件定义另一个触发器(或 REVERT)

    所以,如果我没看错的话,最后一个 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.
    

    【讨论】:

      猜你喜欢
      • 2015-08-05
      • 1970-01-01
      • 2014-06-19
      • 2014-11-10
      • 1970-01-01
      • 1970-01-01
      • 2019-08-03
      • 1970-01-01
      相关资源
      最近更新 更多