循环内的按钮

时间:2015-09-24 10:43:04

标签: progress-4gl openedge

我是一个进步新手,下面是我当前的代码,tableNames和fieldnames改变以保护无辜者。我想循环遍历数据库中的记录,并在该循环中包含一个按钮,以便在有人想要更改某些内容时逐个循环遍历每个记录。我有下面的代码循环通过记录很好(没有下面的按钮元素)和我有一个单独的缓冲区中的按钮元素工作正常,但当我把按钮带入循环循环运行正常,但在第一个按钮后停止。当我尝试继续按钮代码运行时。我想要包含一个按钮但它只在单击时运行该过程。如果我删除“当前窗口等待窗口关闭”这一行。'循环继续我想要的按钮出现,但按钮呈现为不可点击。有任何帮助。

define variable cInsertCompany as character format "x(50)" label "Enter the company name:" no-undo.
define variable cCompanyName as character format "x(50)".
prompt-for cInsertCompany.
assign cCompanyName = input cInsertCompany.

for each tableName where client = 'tgl',
each otherTableName where tableName.ref = otherTableName.ref and TableName.name matches  '*' + cCompanyName + '*':
display 
tablename.nrname
tablename.otherfield.

DEFINE BUTTON bUpdate LABEL "Update".
DEFINE FRAME btn-frame WITH SIZE 10 BY 2.
ENABLE bUpdate WITH FRAME btn-frame.

ON CHOOSE OF bUpdate DO:
 RUN btn-mess.
END.

VIEW FRAME btn-frame.

WAIT-FOR WINDOW-CLOSE OF CURRENT-WINDOW.


PROCEDURE btn-mess.
 MESSAGE "Hello" SKIP "You have selected the new button"
 VIEW-AS ALERT-BOX INFO BUTTONS OK.
END PROCEDURE.

end.

2 个答案:

答案 0 :(得分:2)

只是为了证明,这是一种非常原始的方式,但使用浏览:

DEFINE TEMP-TABLE tt
    FIELD a AS INT
    FIELD b AS CHAR.

DEFINE BUTTON bt  LABEL "Modify".
DEFINE BUTTON btS LABEL "Save".


DEFINE QUERY qr FOR tt.
DEFINE BROWSE br QUERY qr DISPLAY tt.a tt.b WITH SIZE 60 BY 4 .


DEFINE FRAME f
    br bt
    tt.a SKIP tt.b btS WITH THREE-D SIDE-LABELS.

ON 'choose':U OF bt IN FRAME f
DO:
    RUN updateRecord.
END.

ON 'choose':U OF btS IN FRAME f DO:
    FIND FIRST tt WHERE tt.a = INPUT FRAME f tt.a NO-ERROR.
    ASSIGN tt.a = INPUT FRAME f tt.a
           tt.b = INPUT FRAME f tt.b.
    BROWSE br:REFRESH().
    CLEAR FRAME f.
END.

/* Create some test records */
CREATE tt. ASSIGN a = 1 b = 'first'.
CREATE tt. ASSIGN a = 2 b = 'second'.
CREATE tt. ASSIGN a = 3 b = 'third'.

OPEN QUERY qr FOR EACH tt.
ENABLE ALL EXCEPT tt.a tt.b WITH FRAME f.

WAIT-FOR CLOSE OF CURRENT-WINDOW.

PROCEDURE updateRecord:
    DISPLAY tt.a tt.b WITH FRAME f.
    ENABLE  tt.a tt.b WITH FRAME f.
END PROCEDURE.

答案 1 :(得分:1)

好的,首先,我赞同蒂姆上面所说的话。我相信浏览是一种更好的方法,因此您可以查看记录,选择它,然后填充下面的第二个屏幕或字段,然后让用户发疯。但如果你想实现你在这里尝试的东西,我就会制作这个模拟程序。它会切断你的where子句和提示符,但这不是你的问题,所以我专注于使按钮工作:

DEFINE TEMP-TABLE tt
    FIELD a AS INT
    FIELD b AS CHAR.

DEFINE BUTTON bt LABEL "Modify".

DEFINE FRAME f
    tt.a SKIP tt.b bt.

ON 'choose':U OF bt IN FRAME f DO:
    MESSAGE 'you pressed a button'
        VIEW-AS ALERT-BOX INFO BUTTONS OK.
END.

/* Create some test records */
CREATE tt. ASSIGN a = 1 b = 'first'.
CREATE tt. ASSIGN a = 2 b = 'second'.
CREATE tt. ASSIGN a = 3 b = 'third'.

FOR EACH tt:
    DISPLAY tt WITH FRAME f.
    ENABLE bt WITH FRAME f.
END.

WAIT-FOR CLOSE OF CURRENT-WINDOW.

现在,再说一次:这不是最好的方法,我真的认为两个GUI窗口可以使这个更专业和更好。但是为了学习,我就是这样做的。

如果您有任何问题,请告诉我,但我希望代码非常简单。