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.

 

posted on 2011-11-13 18:28  del88  阅读(16)  评论(0编辑  收藏  举报