To qf0421:
TCollection 正式的称呼应该是集合类,它能够包含 TCollectionItem 类型
的集合元素。
该类主要用于控件的制作,如果一个控件拥有一个 TCollection (子)类型的
Property,Delphi 会自动为这个 Property 注册该属性的属性编辑器,即当
在 Object Inspector 中选中该属性时,右边会自动出现 ... 按钮。当点击
该按钮时,会弹出一个子属性编辑窗口,默认有“新建”、“删除”两个按钮。
当点击“新建”时,会生成一个 TCollectionItem (子)类的子对象。
选择这个子对象时,在 Object Inspector 中就可以编辑该子对象的属性。
但是 Delphi 如何知道 TCollection 的 子对象 TCollectionItem 的类型
呢?因为控件往往是继承了 TCollectionItem ,如 TDBGrid 的 TDBGridColumns
拥有 TColumn 类的子对象。原因在这里,请看 TCollection 类的构造函数:
constructor TCollection.Create(ItemClass: TCollectionItemClass);
begin
FItemClass := ItemClass; // 在这里注册了子对象的类型
FItems := TList.Create;
end;
TDBGrid 是这样做的:
constructor TCustomDBGrid.Create(AOwner: TComponent);
begin
...
FColumns := CreateColumns;
...
end;
function TCustomDBGrid.CreateColumns: TDBGridColumns;
begin
Result := TDBGridColumns.Create(Self, TColumn);
end;
constructor TDBGridColumns.Create(Grid: TCustomDBGrid; ColumnClass: TColumnClass);
begin
// 调用 TCollection 类构造函数注册子对象的类型
inherited Create(ColumnClass);
FGrid := Grid;
end;
说的不当之处,请多指教。
From: BaKuBaKu