在Delphi属性构造函数中使用特定的类类型引用
发布时间:2020-12-15 09:51:04 所属栏目:大数据 来源:网络整理
导读:由于Delphi无法处理枚举值的属性,我尝试了另一种方法. TMyEnum是我的枚举. TMyEnumLabelProvider类提供了我需要的标签.我将enum-type与属性链接到labelprovider.但是这不能编译.在引用其classtype之前,我无法完全定义提供程序,因为它在其中一个方法中使用了T
由于Delphi无法处理枚举值的属性,我尝试了另一种方法. TMyEnum是我的枚举. TMyEnumLabelProvider类提供了我需要的标签.我将enum-type与属性链接到labelprovider.但是这不能编译.在引用其classtype之前,我无法完全定义提供程序,因为它在其中一个方法中使用了TMyEnum.
TEnumLabelProviderCallback = procedure(Context: TObject; Index: integer; const Name: string) of object; TEnumLabelProvider = class abstract public procedure Iterate(Context: TObject; Callback: TEnumLabelProviderCallback); virtual; abstract; end; TEnumLabelProviderClass = class of TEnumLabelProvider; TEnumLabelProviderAttribute = class(TCustomAttribute) private FProviderClass: TEnumLabelProviderClass; public constructor Create(ProviderClass: TEnumLabelProviderClass); property ProviderClass: TEnumLabelProviderClass read FProviderClass; end; TMyEnumLabelProvider = class; {$SCOPEDENUMS ON} [TEnumLabelProvider(TMyEnumLabelProvider)] TMyEnum = (MyEnum0,MyEnum1,MyEnum2); {$SCOPEDENUMS OFF} // This is where the compilation fails..... TMyEnumLabelProvider = class(TEnumLabelProvider) public class function GetLabel(MyEnum: TMyEnum): string; procedure Iterate(Context: TObject; Callback: TEnumLabelProviderCallback); override; end; 关于如何正确地做这件事的任何想法.现在我通过声明GetLabel(MyEnum:integer)来解决问题,但显然我更喜欢类型严格. 提前致谢. 解决方法
最简单的解决方案是使用字符串的静态数组来存储下面定义的标签.然后,您可以使用枚举简单地索引数组以获取所需的标签.
type TMyEnum = (MyEnum0,MyEnum2); const EnumLabels : array[TMyEnum] of string = ('MyEnumLabel0','MyEnumLabel1','MyEnumLabel2'); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |