在 Powerbuilder 中验证文本字段

Validate text field in Powerbuilder

我是 powerbuilder 的新手:

我想在完成输入后验证电子邮件文本字段并转到另一个文本字段。

所以我把代码放在 "itemchanged event of the datawindow"

这是我的代码:

choose case dwo.name
case 'email'
  if data <> '' then
    if match(data,'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z][a-zA-Z][a-zA-Z]*[a-zA-Z]*$') then
    else
      This.SetText('')
      MessageBox('Error', 'This is an invalid email')
    end if
  end if
end choose

这里发生的事情是,当我输入例如 'asd'.

所以这是一个无效的电子邮件,因为它没有通过匹配

它实际上清除了电子邮件字段,但在 messagebox fired 和我 clicked OK 之后。

我已清除的电子邮件字段上的

'asd' 值 returns。

我觉得很奇怪?

我应该在哪里举办活动 put my validation 以及如何对此进行编码?或者 itemchanged 中有一个代码,以便我可以清除电子邮件字段?

谁能帮帮我?

幸运的是我在 dw itemchanged 事件中修复了它。

choose case dwo.name
case 'email'
  if data <> '' then
    if match(data,'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z][a-zA-Z][a-zA-Z]*[a-zA-Z]*$') then
    else
      MessageBox('Error', 'This is an invalid email')
      Return 1 //means does not accept the value and triggers itemerror.
    end if
  end if
end choose

通过添加 return 1 它会给出另一个消息框。

Data Window Error: This 'asd' does not pass the validation

覆盖此默认错误消息。

在 dw itemerror 事件中添加一些代码块

CHOOSE CASE dwo.name   
  CASE 'email'  
    This.setText('') //if you just want to validate just remove this.
    Return 2 //means does not accept the value and does not let losefocus
END CHOOSE 

。 :D