【问题标题】:Delphi TCollection - Possible to prevent changing items in run-time?Delphi TCollection - 可以防止在运行时更改项目吗?
【发布时间】:2011-12-25 17:36:47
【问题描述】:

使用 delphi 7,我有一组 TCollection/TCollectionItem 后代。它们旨在仅在设计时设置,绝不能在运行时进行修改。我怎样才能做到这一点?设计时应始终允许任何需要的编辑,但在运行时,我不希望能够添加、删除或重新索引集合中的任何项目。每个项目的属性,是的,我确实希望启用它们。但是更改实际项目只能在设计时进行。

【问题讨论】:

  • 我现在明白了,我知道我必须重写一些方法,只是不知道哪些方法。
  • 顺便说一下,这是因为每个集合项都会有一个内置的线程,在运行时执行,所以我不想在这些线程的时候弄乱它们通过混合集合重新运行。

标签: delphi delphi-7 custom-component readonly tcollection


【解决方案1】:

您可以覆盖TCollectionAssign()Notify() 方法以获取添加和删除通知,并覆盖TCollectionItemSetIndex() 方法以获取重新索引通知。对于添加/删除,抛出异常以拒绝操作(在添加的情况下,您必须释放添加的新项目)。对于重新索引,直接退出而不做任何事情。

为了区分运行时和设计时,遍历TCollection 的所有者链(如果它嵌套在其他类中),直到找到TComponent,然后您可以检查它的ComponentState csDesigning 标志的属性。

【讨论】:

  • 谢谢,我知道我必须重写一些,只是不知道哪些。
猜你喜欢
  • 1970-01-01
  • 2017-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多