首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

怎么知道定义的枚举类型的个数(想了又想)

2012-02-28 
如何知道定义的枚举类型的个数(想了又想)如定义了如下枚举类型:TPrivilegeType(pvtAddNew{1},pvtEdit{2},

如何知道定义的枚举类型的个数(想了又想)
如定义了如下枚举类型:
TPrivilegeType   =   (pvtAddNew{1},   pvtEdit{2},   pvtDel{4},   pvtPrint{8},   pvtCheckIn{16},   pvtCheckInReturn{32},   pvtCheckOut{64},   pvtCheckReturn{128});

要怎么通过代码知道   该枚举TPrivilegeType中有几个值?

[解决办法]
一、对于连续的枚举:
第一种情况:TEumType=(eTest1,eTest2,etest3,etest4,etest5); //是0-4
第一种情况:TEumType=(eTest1=2,eTest2,etest3,etest4,etest5) //是2-6
可以这样得到数量:
procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
begin
i := Ord(High(TEnumType)) - Ord(Low(TEnumType))+1;

ShowMessage(IntToStr(i));
end;

二、对于不连续的枚举:
第三种情况(跳跃式或后边的比前面的小):TEumType=(eTest1=1,eTest=3,etest=5,etest=7,etest=1);
根本没有法子动态得到他的个数

[解决办法]
use typinfo
procedure GetEnumInfo;
var
OrdTypeInfo: PTypeInfo;
OrdTypeData: PTypeData;

TypeNameStr: String;
TypeKindStr: String;
MinVal, MaxVal: Integer;
EnumCount: integer;
begin
// Get the TTypeInfo pointer
OrdTypeInfo := TypeInfo(TFormStyle)
// Get the TTypeData pointer
OrdTypeData := GetTypeData(OrdTypeInfo);

// Get the type name string
TypeNameStr := OrdTypeInfo.Name;
// Get the type kind string
TypeKindStr := GetEnumName(TypeInfo(TTypeKind), Integer(OrdTypeInfo^.Kind));

// Get the minimum and maximum values for the type
MinVal := OrdTypeData^.MinValue;
MaxVal := OrdTypeData^.MaxValue;
EnumCount := MaxVal - MinVal;
end;

热点排行