Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi TCollection-是否可以防止在运行时更改项?_Delphi_Delphi 7_Custom Component_Readonly_Tcollection - Fatal编程技术网

Delphi TCollection-是否可以防止在运行时更改项?

Delphi TCollection-是否可以防止在运行时更改项?,delphi,delphi-7,custom-component,readonly,tcollection,Delphi,Delphi 7,Custom Component,Readonly,Tcollection,使用Delphi7,我有一个TCollection/TCollectionItem子代集。它们仅在设计时设置,不应在运行时修改。我该怎么做?设计时应始终允许进行任何需要的编辑,但在运行时,我不希望能够添加、删除或重新索引集合中的任何项。每个项目的属性,是的,我确实希望它们被启用。但仅在设计时间内更改周围的实际项目 您可以覆盖t收集的Assign()和Notify()方法以通知添加和删除,并覆盖t收集项的SetIndex()方法以通知重新索引。对于添加/删除,抛出异常以拒绝操作(对于添加,必须释放

使用Delphi7,我有一个TCollection/TCollectionItem子代集。它们仅在设计时设置,不应在运行时修改。我该怎么做?设计时应始终允许进行任何需要的编辑,但在运行时,我不希望能够添加、删除或重新索引集合中的任何项。每个项目的属性,是的,我确实希望它们被启用。但仅在设计时间内更改周围的实际项目

您可以覆盖
t收集
Assign()
Notify()
方法以通知添加和删除,并覆盖
t收集项
SetIndex()
方法以通知重新索引。对于添加/删除,抛出异常以拒绝操作(对于添加,必须释放已添加的新项)。要重新编制索引,只需退出而不做任何操作


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

谢谢,我知道我必须重写一些,只是不知道是哪一个。我现在知道了,我知道我必须重写一些方法,只是不知道是哪一个。更具体地说,这是因为每个集合项都有一个内置的线程,在运行时执行,所以我不想在运行这些线程时混淆集合。