【问题标题】:Fill-In validation with N formatN格式的填写验证
【发布时间】:2017-10-19 07:43:43
【问题描述】:

我使用 AppBuilder 填写了以下代码

DEFINE VARIABLE fichNoBuktiTransfer AS CHARACTER FORMAT "N(18)":U 
     LABEL "No.Bukti Transfer" 
     VIEW-AS FILL-IN NATIVE 
     SIZE 37.2 BY 1 NO-UNDO.

由于格式为 N,它会阻止用户输入非字母数字条目。但是,它不会阻止用户将此类条目复制粘贴到填充中。因此,我有一个错误检查,以防止使用休假触发器进行此类条目:

IF LENGTH(SELF:Screen-value) > 18 THEN DO:
      SELF:SCREEN-VALUE = ''.
      RETURN NO-APPLY.
END.
        vch-list = "!,*, ,@,#,$,%,^,&,*,(,),-,+,_,=".
        REPEAT vinl-entry = 1 TO NUM-ENTRIES(vch-list):
            IF INDEX(SELF:SCREEN-VALUE,ENTRY(vinl-entry,vch-list) ) > 0 THEN DO:
                SELF:SCREEN-VALUE = ''.
            RETURN NO-APPLY.
            END.
        END.

但是,在错误处理启动后,当用户输入任何字符串并触发休假时,会出现错误 632:

error 632 occurs

有什么方法可以禁用错误消息?或者我应该以不同的方式处理错误?

编辑:忘了提,我在 Openedge 版本 10.2B 上运行

【问题讨论】:

    标签: openedge progress-4gl


    【解决方案1】:

    您没有提及版本,但我假设您的版本中已经存在 CLIPBOARD 系统句柄。 我已经模拟了你的程序,我相信它不应该那样做。在我看来,无论如何都会引发错误标志。我的猜测是,即使这些符号无法显示,它们也会以某种方式分配给屏幕值。

    抛开猜想,我设法通过添加以下代码来抑制它:

    ON CTRL-V OF FILL-IN-1 IN FRAME DEFAULT-FRAME 
    DO:
      if index(clipboard:value, vch-list) > 0 then
         return no-apply.
    END.
    

    当然,这意味着 vch-list 不能再限定于您的触发器,以防万一,因为您需要离开前的值。所以我将特殊字符列表作为初始化值分配给变量。 完成此操作后,我不再收到错误消息。希望对您有所帮助。

    【讨论】:

    • 当用户右键点击并选择粘贴时,这可能不起作用
    • 啊,我忘了说我运行的是10.2B版本
    • 正如迈克所说,如果用户右键单击并选择粘贴,这似乎不起作用,这也是必须处理的,否则会再次弹出错误。但我认为这是一个很好的开始,谢谢!
    【解决方案2】:

    为了跟踪填充中的变化,我一开始总是使用以下代码:

    ON VALUE-CHANGED OF FILL-IN-1 IN FRAME DEFAULT-FRAME 
    DO:
      /* proofing part */
      if ( index( clipboard:value, vch-list ) > 0 ) then do:
        return no-apply.
      end.
    END.
    

    您可以通过 AppBuilder 添加一些鼠标或开发者事件来跟踪填充中的变化。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多