2010-08-19 290 views
2

我有一个主 - 细节窗口。在更改字段并单击主窗口时,在详细信息窗口中,焦点会更改,但不会触发详细数据窗口的itemchanged事件。现在我想在焦点从一个数据窗口更改为另一个数据窗口时触发itemchanged事件。powerbuilder:itemchanged事件不会在更改焦点时触发

评分:如果我更改一个字段并按Tab键,或者如果我更改一个字段并在同一个数据窗口的不同字段中单击,itemchanged事件只会触发。

+0

如果该项目没有改变,为什么你想'itemchanged'发射?如果您想要焦点更改事件,请捕获这些事件。 – tpdi 2010-08-19 05:56:57

回答

3

在详细数据窗口的'LoseFocus'事件中,调用详细数据窗口上的AcceptText()。

+0

你能解释一下这里发生了什么吗? – 2010-08-19 06:26:43

+2

鬼脸。问题分析是正确的,但随后数据验证会在用户尝试按下“取消”按钮时触发。我知道这是一种流行和简单的方法,但它对我产生了太多的负面影响。我把AcceptText()放在何时何地有意义,比如OK按钮,当最后一个焦点对象是细节时,GetFocus在主控上,等等......让应用程序在切换应用程序时抛出错误信息检查你的电子邮件(另一次你的DW失去焦点),你的用户会告诉人们PowerBuilder很糟糕。 Terry 2010-08-21 02:22:18

4

如果用户输入数据并且没有按标签,则焦点不会改变。并且itemchanged在值更改之前不会触发(并通过验证)。

这里真正发生了什么(如果我正确地记住),PowerBuilder会在实际的数据窗口上放置一个编辑区域;直到PB从编辑控件中获取值之后,数据窗口才会看到新值。

您需要捕捉改变的焦点(onblur,我想?),或者如果这不够精细,则需要密码消息。

+0

我相信它实际上是'LoseFocus',然后从那里触发item改变。 – 2010-08-19 06:18:41

+0

如何从lostfocus触发itemchanged?我已经尝试过了。我可以获取当前行,但是如何获取当前列的控件?另外我需要将新数据作为参数传递给itemchanged事件,我将如何获取该数据?如果我可以访问这些数据,那么我的问题首先得到解决。 – 2010-08-19 06:22:02

+0

感谢您的解释.. + 1 – 2010-08-19 06:43:57