0

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

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

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

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

4

3 回答 3

0

如果按照 Terry 的建议进行完全重建不能解决您的问题,请尝试迁移目标。我会直接去迁移,而不是尝试另一个完全重建。将迁移视为“不,真正重建一切”命令。

于 2012-05-21T20:00:03.853 回答
0

当您看到没有意义的程序流程时,我在我的 PB 故障排除指南中推荐的第一件事是重新生成所有内容,即进行完整构建。仅此一项就可以解决问题。(选择性再生也可以解决它,但是如果您对所需的依赖关系或序列有任何疑问,我倾向于使用系统导向的基因。)

如果您想知道如何进入 ItemChanged 的​​实例,我首先要看的是调试器中的调用堆栈窗格。如果它来自 AcceptText() 调用,您应该在双击当前级别上方的级别时看到它。如果 ItemChanged 上方没有调用堆栈,则可能是从列中跳出、按 Enter 或发布的 AcceptText()。有时,PBDEBUG 跟踪与PBL Peeper 中的 Trace 页面相结合,可以在调试器没有的情况下阐明您是如何到达那里的。

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

祝你好运,

特里。

于 2012-05-17T17:20:34.003 回答
0

在我使用 PB 的 19 年开发过程中,还没有见过或听到过这样的事情!只有对象已损坏并且您可以按照@Terry 所说的那样重新生成它。当然,您也可以尝试将 Windows、datawindows 导出到不同的 PBL 并尝试它是否可以在那里工作。大约 10 年前,我遇到了类似的问题,即 PBL 文件已损坏并且重新生成对象没有帮助。意外地,我尝试重新创建一个新应用程序,它在那里工作。慢慢地,随着更多的测试,这一点变得明显。希望您不要浪费我们在这样一个愚蠢的问题上浪费的时间!

于 2012-05-20T17:18:24.090 回答