请问一下自定义的TCollection类怎么用呀?

妞妞的粑粑 2002-04-05 11:59:06
最好有例子!◎
...全文
62 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
妞妞的粑粑 2002-04-05
  • 打赏
  • 举报
回复
讲的不清楚!
forgot 2002-04-05
  • 打赏
  • 举报
回复

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;

5,927

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧