我想比较两个组件的“状态”,比如Comp1: TSomeComponent
和Comp2: TSomeComponent
,即我想比较两个组件的所有已发布属性的值。某些属性已编制索引,例如TListBox.Items属性。是否有捷径可寻?我是否必须调用一些迭代的RTTI代码?
答案 0 :(得分:2)
一种简单的方法是使用WriteComponent
对它们进行序列化,并比较生成的字符串。但请注意,这只会比较published
,而不是public
属性。但这就是你所说的,所以......
请注意,这会使索引属性的 order 显着。这可能是也可能不是你想要的。
答案 1 :(得分:0)
不幸的是,据我所知,在Delphi中没有简单的比较函数。 (我已经在D2007停了。)你可以在基类中添加一个“比较”方法,并构建该方法中所有字段的比较。 (它应该接受同一基类的一个参数。)使用D2007,您可以将其构建为辅助类,但仍需要指定字段。 其他类可以从这个基类继承并覆盖基本的Compare方法。
使用RTTI可以更容易地比较不同类型的类的字段,但它很复杂且容易出错。它需要对各种不同的类进行大量测试。
答案 2 :(得分:0)
我使用的技巧(但我想在IDE中集成这样的东西)是复制与2个组件相关的dfm部分(使用ALT + F12)来访问dfm,然后我将2个组件粘贴到NotePad++我使用Compare插件来比较2。 它提供了一个很好的视觉输出,但是这比在IDE中选择更多组件(即使是从不同的窗口)花费更多的时间,然后将它们与IDE中内置的比较工具进行比较。