PowerBuilder 在 ItemChanged 上自定义错误消息

PowerBuilder Customize Error Message on ItemChanged

在数据窗口的ItemChanged 事件上,我必须在输入错误时提示消息。 问题是:当我使用 messagebox() 时,它会正确提示消息,但字段不是空白,并且通过按 TAB 键,控件将转移到下一个字段。 (意味着它通过再次按 TAB 键接受错误的值) 这是上述场景的简单代码:

    if lb_error = true then
        messagebox('Info','Only Digits Are Allowed ~nAll Digits Cannot Be 0')
        this.object.payer_phone[1] =''
    end if   

然后我尝试了修改 属性,它工作正常但是有没有可能改变它的标题和图标?我正在使用以下代码,请帮助我。

   if lb_error = true then
      this.Modify("payer_phone.ValidationMsg='Only Digits Are Allowed ~nAll Digits Cannot Be 0'")
      this.object.payer_phone[1] =''
      return 1
   end if  

我正在使用 PowerBuilder 12.0。

来自 PowerBuilder 帮助:

Return Values Set the return code to affect the outcome of the event:

0 (Default) Accept the data value

1 Reject the data value and do not allow focus to change

2 Reject the data value but allow the focus to change

因此,在您的情况下,您需要从 itemchanged 事件中 RETURN 1。

由于您在 itemchanged 中处理此错误,因此您需要 'bypass' itemerror 事件。您可以通过在此处放置 RETURN 1 来实现。

通过在 itemchanged 事件中触发错误,您可以创建自定义错误消息框或使用系统默认值并控制标题、图标、按钮等。

假设 payer_phone 是正在编辑的字段,我相信您需要 SetText() 而不是在数据集中设置基础值。

要理解这种差异,您需要知道对于数据输入,有一个控件 "floating above" 数据窗口,可以在具有焦点的字段之间移动。当输入的数据被接受时,浮动控件中的值被刷新到数据仓库的数据集中。 GetText() 和 SetText() 处理那个浮动控件。您的代码正在更改 DW 数据集。在第一个错误之后,下次您按 Tab 时,未检测到控件中的任何更改,因此不会发生数据更改时触发的功能,并且您的错误代码永远不会启动。

祝你好运。

您可以使用具有不同签名的相同函数 MessageBox 修改图标和标题: MessageBox(标题,文本{,图标{,按钮{,默认}}})

HTH, 阿里

您可以使用具有不同签名的相同函数 MessageBox 修改图标和标题:MessageBox ( title, text , icon , button , default )

HTH、阿里