PowerBuilder AcceptText没有调用ItemChanged

时间:2012-05-17 15:33:39

标签: powerbuilder

我有一个数据窗口,用户可以在其中编辑数据,然后单击“保存”按钮。我在数据窗口上编写了ItemChanged事件,将旧值和新值存储在实例变量中,以便将它们保存在数据库中以供参考。如果用户在DW中编辑了一个字段而没有标记,则不会调用ItemChanged。因此,如果他们输入数据并立即单击“保存”,则实例变量不会被填充。

我正在调用AcceptText作为“保存”按钮中的第一个内容,它应该在DW中获取所有输入的数据并调用ItemChanged(根据PB帮助)。但事实并非如此。奇怪的是,它似乎正在浏览“保存”按钮中的所有代码,然后通过ItemChanged事件中的代码。

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

我从来没有见过这样的东西,所以我很感激您提供的任何建议。谢谢!

3 个答案:

答案 0 :(得分:0)

当你看到没有意义的程序流时,我在my PB Troubleshooting Guide中推荐的第一件事就是重新生成所有内容,即执行完全构建。仅这一点就可以解决这个问题。 (选择性的regens也可以解决它,但如果你对所需的依赖性或序列完全有疑问,我倾向于依赖于系统导向的一族。)

如果您想知道如何进入ItemChanged的实例,首先我看看调试器中的调用堆栈窗格。如果它是来自AcceptText()调用,您应该看到当您双击当前级别之上的级别时。如果ItemChanged上方没有调用堆栈,则可能是从列中跳出,按Enter键,或者是发布的AcceptText()。有时,PBDEBUG跟踪与the Trace page from PBL Peeper结合使用,可以解释调试器没有的问题。

这绝对是奇怪的行为,我希望regen解决你的问题。

祝你好运,

特里。

答案 1 :(得分:0)

在我19岁的PB开发过程中,没有看到或听过这样的事情!只有当对象被破坏并且你可以像@Terry所说的那样重新生成它时,才有可能。您当然也可以尝试将Windows,datawindows导出到不同的PBL并尝试在那里工作。大约10年前,我遇到了类似的问题,其中PBL文件已损坏,并且重新生成对象没有任何帮助。不小心,我试图重新创建一个新的应用程序,它在那里工作。慢慢地,通过更多测试,这变得明显。希望你不要因为这么愚蠢的问题而浪费相同的时间!

答案 2 :(得分:0)

如果Terry建议的完全重建无法解决您的问题,请尝试迁移目标。我会直接迁移而不是尝试另一次完全重建。将迁移视为“否,真的重建所有内容”命令。

相关问题