关于itemchanged和itemerror事件的两个问题

时间:2009-11-25 16:33:39

标签: powerbuilder

在PB6.5.1和PB9.0中:

问题1:  在itemchanged事件中:     返回1  在itemerror事件中:     返回3 在运行时,触发的事件序列是:    itemchanged - > itemerror - > itemchanged - > itemerror 为什么每个事件都被触发两次?

问题2:   在itemchanged事件中:      返回1   在itemerror事件中:      返回2 在运行时,焦点没有移动到下一个单元格。 为什么呢?

感谢。

1 个答案:

答案 0 :(得分:5)

问题1 :从itemerror返回3,您拒绝了数据,这会清除该列并再次触发itemchanged

至于哲学上为什么PowerBuilder被设计为以这种方式工作,我怀疑他们认为它会遵循最少惊讶的原则,即他们期待人们问为什么拒绝输入没有触发itemchanged

问题2: itemchanged事件会覆盖itemerror。在itemchanged中,您拒绝了输入阻止了焦点更改;在itemerror中,您现在接受输入,但是您没有在焦点更改时删除该块。您应该从itemchanged返回2,因为您可以通过返回1或3来控制是否允许焦点从itemerror事件更改。


如果有人在没有powerbuilder帮助文件的情况下阅读这个问题,那么:

返回itemchanged的值:

  

0(默认)接受数据值
  1拒绝数据值并且不允许焦点改变(触发迭代错误)
  2拒绝数据值但允许焦点改变(触发itemerror)

返回itemerror的值:

  

0(默认值)拒绝数据值并显示错误消息框
  1拒绝没有消息框的数据值
  2接受数据值
  3拒绝数据值但允许焦点改变