我正在使用 delphi xe2 (完全更新)和 Express QuantumGridSuite 13.2.2 。我在网格上有很多列,我为某些列设置了 RepositoryItem。EditREpository 组件是另一种形式。有时,列 repositoryItem 属性会随机清除。我认为某些东西正在触发它,但我找不到这是关于什么的,它是怎么做的?Tnks 为您提供帮助。
1 回答
这种组件值在设计时“丢失”的问题是一个已知现象,即使对于 EMBA 自己的组件也是如此。通常,它会在 IDE 中首次打开表单时显示出来。
根据我的经验,ymmv,它几乎总是发生在表单 A 的某个组件的属性上,该属性引用了表单 B 上的一个组件,如果在表单 B 之前在 IDE 中打开表单 A,它似乎更频繁地发生。
无论如何,您可以做一些事情来尝试确定问题,并且至少可以使用一种解决方法,直到您这样做为止。但是,在您开始之前,如果您还没有,首先要做的就是询问 Devex 他们是否知道这个问题。这里没有不尊重读者,但他们更有可能知道,而且您可能错过了修复它的维护更新。
当我自己编写的组件发生这种情况时,通常是由我对组件的初始化和/或属性设置器的编码中的一些错误引起的。在我自己的组件的情况下,我一直很幸运,尽管起初行为似乎是随机的,但实际上在 IDE 中已经转变为触发它的特定操作序列。如果您可以确定可重复的操作序列,那么您就可以解决 90% 的问题。
最好的起点是在其出现问题的状态下对您的代码进行参考备份。然后在 IDE 中尝试各种操作序列,在中间回滚到您的参考,直到找到引发问题的一个。如果这听起来很乏味,那就是,但你可能会很幸运并尽早发现一个模式。如果你不这样做,那么请不断提醒自己,问题似乎只是随机的,因为你还没有发现这种模式。
但是,我的印象(尽管没有证据)表明另一个行为不端的组件会干扰正在失去价值的组件的属性设置。因此,要查看的一件事是其他组件与受影响的组件在同一表格上。并非所有人都具有与来自 Devex 的 Quantum Grid 及其兄弟姐妹相同的血统。
我发现有效隔离我自己编写的组件的问题的方法是:
- 从表单中删除所有其他组件。
- 看看我是否可以找到触发问题的可重现的操作序列(例如打开什么订单)。
- 编辑 DFM,使受影响的组件最后出现在其中。同上,首先。
- 在自身的另一个实例中运行 IDE。这样做的主要原因是看您,或者更确切地说是调试器,是否可以取消屏蔽在某些设计时组件代码中发生的通常静默异常,该异常可能与属性值丢失有关。Devex 的 Quantum Grid 被广泛使用(我自己使用),有着悠久的历史,而且它们的代码通常质量上乘。虽然我不认为它是完美的,但我会首先假设问题是由其他原因引起的。
你可能已经注意到,这个问题最麻烦的事情之一是,如果组件在一个很少使用的表单上,通常你第一次听到它是在用户报告它的时候。
无论如何,话虽如此,如果你能想出一个只涉及 Devex 组件和标准组件的可重现测试用例,可以提交给他们进行调查,我相信他们不会花很长时间找到和修复问题。我敢肯定,如果它在他们自己的代码中,他们会修复它(我希望 EMBA 本身也是如此)。
但是,如果没有可重现的测试用例,我认为您希望做的最好的事情就是在表单的创建中添加显式代码,以便在运行时设置组件值,例如,在首次创建表单时。对于我自己的问题组件,有一次或两次我发现仔细跟踪我为此添加的代码导致我找到了问题的原因。