delphi 枚举 与 字符串 互转,直接上代码。
unit Unit3;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, System.TypInfo, System.Rtti;
type
TForm3 = class(TForm)
btn1: TButton;
mmo1: TMemo;
procedure btn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
//定义一个测试枚举
EColors = (Red, Yellow, Green, Blue);
TColors = (cRed = 1, cGreen = 2, cBlue = 4); //在这个例子中,cRed
的值是 1,cGreen
的值是 2,cBlue
的值是 4。注意,这些值不必是连续的
var
Form3: TForm3;
implementation
{$R *.dfm}
procedure TForm3.btn1Click(Sender: TObject);
var
od: Integer;
s: string;
cl: EColors;
begin
//获取元素的序号
cl := Red;
mmo1.Lines.Add(IntToStr(Ord(cl))); //0
cl := Blue;
mmo1.Lines.Add(IntToStr(Ord(cl))); //3
//枚举转字符串方式一(常用简单), uses System.TypInfo
mmo1.Lines.Add(GetEnumName(TypeInfo(EColors), 2));//Green 知道枚举序号,一般不会使用这个
mmo1.Lines.Add(GetEnumName(TypeInfo(EColors), Ord(Blue)));//Blue 一般使用这个
//枚举转字符串方式二(RTTI), uses System.Rtti
mmo1.Lines.Add(TValue.From<EColors>(Blue).ToString);//Blue
//字符串转枚举,uses System.TypInfo
s := 'Blue';
od := GetEnumValue(TypeInfo(EColors), s); //3
mmo1.Lines.Add(od.ToString);
cl := EColors(od);
case cl of
Red: mmo1.Lines.Add('Red');
Yellow: mmo1.Lines.Add('Yellow');
Green: mmo1.Lines.Add('Green');
Blue: mmo1.Lines.Add('Blue'); //Blue
end;
//即字符串转枚举是: EColors(GetEnumValue(TypeInfo(EColors), s));
end;
end.
本文来自博客园,作者:del88,转载请注明原文链接:https://www.cnblogs.com/del88/archive/2011/11/13/2247458.html