【问题标题】:window form goes not responding stage窗体进入无响应阶段
【发布时间】:2020-04-10 07:31:59
【问题描述】:

我是进度 4GL 的新手。在我的程序中,我尝试使用progress 4GL 创建一个表单。该表单有两个字段,一个是数据库名称,另一个是数据库描述。默认情况下,此表单的范围应具有一个 DB 名称和描述,如果用户在 DB 名称字段中输入或保留空白,则警报框应给出一条消息。我已经开发了表单,但是当我运行它时,程序会继续运行,并且窗口表单进入无响应阶段。我没有机会输入数据库字段名称或将其留空。让我分享我的代码,请帮助找出问题所在以及为什么它会持续运行。

define variable cArcDB      as character   no-undo format "x(20)" INIT "qadb".
define variable cArcDBDesc  as character   no-undo format "x(25)" INIT "archive database".
define variable cTmp  as character   NO-UNDO.

form
cArcDB     colon 25
cArcDBDesc colon 25
with frame frArchiveDB width 80 side-labels.

MAIN-LOOP:
REPEAT:

display
     cArcDB
     cArcDBDesc
  with frame frArchiveDB.

  set
     cArcDB
  with frame frArchiveDB editing:
     if frame-field = "cArcDB" then do:
        /* Find next/prev record from ttAppDB */
        cTmp = cArcDB:input-value in frame frArchiveDB.

           display
              cArcDB
              cArcDBDesc
           with frame frArchiveDB.
        end.
  end. /* editing */
  cArcDB = trim(cArcDB).

  if cArcDB = "" then do:
     /* Blank not allowed */
   /*  {us/bbi/pxmsg.i &MSGNUM=40 &ERRORLEVEL=3} */
     next-prompt cArcDB with frame frArchiveDB.
     undo MAIN-LOOP,retry MAIN-LOOP.
  end.
  END.

【问题讨论】:

    标签: openedge progress-4gl


    【解决方案1】:

    请查看“编辑短语”的在线参考。对我来说,您似乎在 EDITING 块开始后丢失了 READKEY,并且您还需要在某个时候“应用 LASTKEY”。在那里查看示例:

    /* Update Customer fields, monitoring each keystroke during the UPDATE */
    UPDATE Customer.Name Customer.Address Customer.City Customer.State SKIP
      Customer.SalesRep HELP "Use the space bar to select a SalesRep" 
      WITH 2 COLUMNS EDITING:  /* Read a keystroke */
      READKEY.
      /* If the cursor is in any field except SalesRep, execute the last key
         pressed and go on to the next iteration of this EDITING phrase to check
         the next key */
      IF FRAME-FIELD <> "SalesRep" THEN DO:
        APPLY LASTKEY.
        IF GO-PENDING THEN LEAVE.
        ELSE NEXT.
      END.
      /* When in the SalesRep field, if the last key pressed was the space bar
         then cycle through the sales reps */
      IF LASTKEY = KEYCODE(" ") THEN DO:
        FIND NEXT SalesRep NO-ERROR.
        IF NOT AVAILABLE SalesRep THEN FIND FIRST SalesRep.
        DISPLAY SalesRep.SalesRep @ Customer.SalesRep.
        NEXT.
      END.
      /* If the user presses any one of a set of keys while in the SalesRep field,
         immediately execute that key */
      IF LOOKUP(KEYFUNCTION(LASTKEY), 
        "TAB,BACK-TAB,GO,RETURN,END-ERROR") > 0 THEN APPLY LASTKEY.
      ELSE BELL.
    END.
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多