在PB6.5.1和PB9.0中:
问题1: 在itemchanged事件中: 返回1 在itemerror事件中: 返回3 在运行时,触发的事件序列是: itemchanged - > itemerror - > itemchanged - > itemerror 为什么每个事件都被触发两次?
问题2: 在itemchanged事件中: 返回1 在itemerror事件中: 返回2 在运行时,焦点没有移动到下一个单元格。 为什么呢?
感谢。
答案 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拒绝数据值但允许焦点改变