通过变量更改组件

问题描述 投票:0回答:1

在我的公司,我设计了一些程序,通过使用一些FILL-INs来显示一些信息。

他们要求这样做而不是自由格式查询,因为他们需要从远处查看程序 - 而且我们已经尝试过查询(我知道这将是最好的解决方案)

我正在尝试对我的代码进行一些优化。所以我的问题是:是否可以使用这样的东西来更改 FILL IN (或其他组件) 的元素?

DEFINE INPUT PARAMETER cComponent AS CHARACTER NO-UNDO.
DEFINE INPUT PARAMETER cMessage   AS CHARACTER NO-UNDO.

VALUE(cComponent):SCREEN-VALUE IN FRAME {&FRAME-NAME} = cMessage.

因为我现在的流程是这样的:
(如果你有 40 个 FILL-IN 之类的东西,这会变得一团糟)

DEFINE INPUT PARAMETER iID      AS INTEGER   NO-UNDO.
DEFINE INPUT PARAMETER cMessage AS CHARACTER NO-UNDO.

CASE iID:

    WHEN 1 THEN DO:
        ASSIGN fll-info1:SCREEN-VALUE = cMessage.
        ...
    END.

    ...

    WHEN n THEN DO:
        ASSIGN fll-infon:SCREEN-VALUE = cMessage.
        ...
    END.

END CASE.

我目前使用的是 11.7 版本 - 但我们将在今年晚些时候开始升级到 12.2。

感谢您的帮助!

openedge progress-4gl
1个回答
0
投票

您不能对变量/参数/等执行 VALUE()

但是您可以做的是循环遍历框架字段,并查找与您的组件名称匹配的字段(也称为遍历小部件树)。根据您的起点(可能是父框架),您需要首先获取字段组,然后获取该组中的字段。

ASSIGN h = h_frame:FIRST-CHILD        /* The Field Group */
       h = h:FIRST-CHILD.                  /* The grandchild */
DO WHILE h NE ?:            

  IF (h:NAME = "<your component>":u) THEN
    /* do something */ .

  h = h:NEXT-SIBLING.
END.
© www.soinside.com 2019 - 2024. All rights reserved.