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

use*_*765 4 powerbuilder

在PB6.5.1和PB9.0中:

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

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

谢谢.

Col*_*ard 5

问题1:通过返回3 itemerror,您已拒绝数据,这会清除列并itemchanged再次触发.

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

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


万一有人在没有powerbuilder帮助文件的情况下阅读这个问题:

返回值itemchanged:

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

返回值itemerror:

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