2012-05-17 58 views
0

我有一个数据窗口,用户可以编辑数据,然后点击“保存”按钮。我已经在数据窗口上编写了ItemChanged事件,以将旧值和新值存储在实例变量中,以便将它们保存在数据库中以供参考。如果用户在DW中编辑了一个字段并且没有标出,ItemChanged不会被调用。所以如果他们输入数据并立即点击'保存',实例变量就不会被填充。PowerBuilder的AcceptText没有要求ItemChanged

我打电话给AcceptText作为'保存'按钮中的第一件事,该按钮应该可以获得DW中输入的所有数据,并且可以调用ItemChanged(根据PB的帮助)。但事实并非如此。奇怪的是,它似乎正在通过“保存”按钮中的所有代码,然后通过ItemChanged事件中的代码。

另一个奇怪的是,如果我调试它,并在ItemChanged事件中放置断点,当我点击'保存'时,它将通过ItemChanged代码,但它不会执行'保存'按钮代码。我必须再次单击“保存”。这只是当我调试和只有当我有一个断点 - 当我正常运行应用程序或调试没有断点,它调用后保存按钮ItemChanged

我从来没有见过这样的事情,所以我会很感激你能提供任何意见。谢谢!

+0

accepttext失败了吗?良好的返回码?如果选中,Itemchanged将触发,但接受文本可能由于某种原因失败。也许尝试尝试editchanged,它会输入每个字符。也许有人把编辑中的代码改变为与缓冲区混淆......不太可能,但永远不知道。 –

回答

0

的第一件事情,我在建议,当你看到程序流程是没有意义的再生一切,即做一个完整的构建。只有这一点才能解决问题。 (选择性复原也可以解决它,但是如果您完全不确定是否需要依赖性或序列,我倾向于回退到系统定向的氏族。)

如果您想知道如何进入ItemChanged的实例,我要看的第一个地方是调试器中的调用堆栈窗格。如果它来自AcceptText()调用,那么当您双击当前级别上方的级别时,应该会看到这一点。如果ItemChanged上方没有调用堆栈,则可能是从列中跳出,按Enter键,或者可能是发布的AcceptText()。有时PBDEBUG跟踪与the Trace page from PBL Peeper相结合,可以阐明如何在调试器没有时到达那里。

这绝对是怪异的行为,而我希望的再生解决您的问题。

祝你好运,

特里。

+0

谢谢你的帮助!我试图重新生成,但没有奏效。我查看了Call Stack窗格,这帮助我确定AcceptText在我单击Save按钮时由数据窗口上的LoseFocus事件调用。在处理完ItemChanged后,代码不会通过保存按钮的代码。我无法弄清楚为什么。此外,这只会发生,如果我有一个断点 - 如果我不调试LoseFocus根本不会被调用。 – Julia

+0

Arrgghhh!我最喜欢的一个编程爱好者:在LoseFocus中编写一个AcceptText()。好的,首先要做的事情是:这解释了为什么保存按钮中的AcceptText()不会执行任何操作,包括调用ItemChanged;已经完成了要做的事情。如果数据值已被接受,则AcceptText()不会触发ItemChanged。其次,要说服你,这个在LoseFocus中的AcceptText()是邪恶的。当您输入错误的值时会发生什么,然后按取消?数据验证消息?啊。愚蠢的用户体验;为什么我应该关心数据是否无效,如果我即将抛出?没有更多房间! – Terry

0

还没有看到或在我的19 PB的发展年听说过这样的事!只有当对象被破坏并且你可以像@Terry所说的那样重新生成它时,才会出现这种情况。您当然也可以尝试将Windows,数据窗口导出到不同的PBL,并尝试它是否可以在那里使用。大约10年前,我有一个类似的问题,PBL文件被损坏,重新生成对象没有任何帮助。不小心,我试图重新创建一个新的应用程序,它在那里工作。慢慢地,这在更多的测试中变得明显。希望你不要失去我们在这样一个愚蠢的问题上浪费的时间!

0

如果完全重建为Terry建议不能解决您的问题,请尝试迁移目标。我会直接进行迁移,而不是尝试另一次完全重建。考虑迁移为“否,真的重建所有”命令。

相关问题