编写组件用TCollection编辑如下属性:
type
TBase = class end; TClass1 = class(TBase) end; TClass2 = class(TBase) end;
... TClassType = (ctClass1, ctClass2, ...); TClassItem = class(TCollectionItem)
private
FClassType: TClassType;
FItem: TBase;
procedure SetClassType(const Value: TClassType);
...
published
property ClassType: TClassType read FClassType write SetClassType;
property MyClass: TBase read FItem;
end; ... procedure SetClassType(const Value: TClassType);
begin
if FClassType = Value then Exit;
FClassType = Value;
if Assigned(FItem) then FItem.Free;
case FClassType of
ctClass1: FItem := TClass1.Create;
ctClass2: FItem := TClass2.Create;
...
end;
end; 由于TClass1,TClass2等的属性个数和类型不一样,当改变FItem的类实例时,如果对应的类属性
MyClass在Object Inspector中已经展开,不能得到正确的显示,有时还会报错,必须在TCollectionItem编辑窗口移动后,或者将已经展开的属性收拢,显示才正确。
提问:怎样才能刷新Object Inspector的显示?或者用什么方法控制Object Inspector中属性的结点(展开和收拢)?或者其它方法解决该问题? 不知道问题说清楚没有,如果不明白意思请问我,本人在线等。问题一经解决立即结贴。
type
TBase = class end; TClass1 = class(TBase) end; TClass2 = class(TBase) end;
... TClassType = (ctClass1, ctClass2, ...); TClassItem = class(TCollectionItem)
private
FClassType: TClassType;
FItem: TBase;
procedure SetClassType(const Value: TClassType);
...
published
property ClassType: TClassType read FClassType write SetClassType;
property MyClass: TBase read FItem;
end; ... procedure SetClassType(const Value: TClassType);
begin
if FClassType = Value then Exit;
FClassType = Value;
if Assigned(FItem) then FItem.Free;
case FClassType of
ctClass1: FItem := TClass1.Create;
ctClass2: FItem := TClass2.Create;
...
end;
end; 由于TClass1,TClass2等的属性个数和类型不一样,当改变FItem的类实例时,如果对应的类属性
MyClass在Object Inspector中已经展开,不能得到正确的显示,有时还会报错,必须在TCollectionItem编辑窗口移动后,或者将已经展开的属性收拢,显示才正确。
提问:怎样才能刷新Object Inspector的显示?或者用什么方法控制Object Inspector中属性的结点(展开和收拢)?或者其它方法解决该问题? 不知道问题说清楚没有,如果不明白意思请问我,本人在线等。问题一经解决立即结贴。
解决方案 »
- SPCOMM中OnReceiveData事件没有触发?
- 当前行数据,多行选择
- 救助:修复pardox
- 报表问题!有如下结构表,不知道怎么实现要求的报表,将字段作为记录值输出
- 听朋友说有一组名为IP4000数据库操作方面的控件,可从www.delphi51.com下载,我进不去那个网站,请问大家还可以从哪儿下?
- 奇怪,一个nmftp的问题!
- 如何让一个NORMAL窗体一直显示在最前面,但又不能模态显示,怎么办?
- Insert问题请教
- Delphi5 Interbase组控件的Session问题
- 当Mouse移到窗口标题栏时,如何做到出现提示(Hint)框?
- 哪位能推荐个免费或开源的录音组件啊?有Active Audio Record的注册码或注册机也可以啊
- 如何把frame放入dll中进行调用?
procedure SetClassType(const Value: TClassType);
var
Form: TCustomForm
begin
...
//在这里想办法取得组件所在的窗口,然后
Form.Designer.Modified;
end;或者,重写一个TClassType属性的属性编辑器(继承自原有的属性编辑器,这里应该是TEnumProperty)
然后在SetValue中写:
procedure TYourEnumProperty.SetValue(const Value: string);
begin
Inherited;
Designer.Modified;
end;
然后注册这个属性编辑器。上面两种方法仅作为参考,有效否,还得自己试一下。