TCommandType = (ctEmptyCommand,ctAdd,ctModify);
能否根据枚举类型的值得到数字,比如如果为ctAdd,则返回一个数字1(也可能是2),
如果数字1,得到的枚举类型为ctAdd
请问大家有什么方法可以做到吗?

解决方案 »

  1.   

    可以,不过要对应,比如 ctEmptyCommand是0,后面加一,如果 ctEmptyCommand=2,那么 ctEmptyCommand对应的是2,后面依次加一
      

  2.   

    可以,不过要对应,比如 ctEmptyCommand是0,后面加一,如果 ctEmptyCommand=2,那么 ctEmptyCommand对应的是2,后面依次加一
      

  3.   

    谢谢bdmh
    var
     x:TCommandType
     i:integer;
    begin
      if x = ctEmptyCommand then i := 0
      else ....
      //如果枚举类型有好几十个,有好办法写出来吗?  if i = 0 then x := ctEmptyCommand 
      else ....
      //几十个if语句,或许可以用case of,但是万一顺序弄错了,后面的全错了,
      //有没有类似ord之类的简单方法呢?end;
      

  4.   

    默认是从0开始的,后面递增,即等价于下面这样:
    TCommandType = (ctEmptyCommand=0,ctAdd,ctModify);也可以改成
    TCommandType = (ctEmptyCommand=3,ctAdd,ctModify);取序数用Ord
    第1种Ord(ctAdd),结果是1
    第2种Ord(ctAdd),结果是4
      

  5.   

    先定义常量
    const
      Const_enum1 = 1;
      Const_enum2 = 2;
      ........
      Const_enum15 = 15;然后定义枚举:
    如果是顺序的:
    type
      TMyEnum = (me01 = Const_enum1,...,me15);
    如果不是顺序的:
      TMyEnum = (me01 = Const_enum1,me02=Const_enum2...,me15=Const_enum15);  然后就是Ord(me01)=Const_enum1;TMyEnum(Const_enum1)=me01;
      

  6.   


    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, TypInfo ;
    type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;type
      TCommandType = (ctEmptyCommand, ctAdd, ctModify);
      TCommandTypeConvert=class
      public
        class function CommandToString(ACommand: TCommandType): string;
        class function StringToCommand(const AStrCommand: string): TCommandType;
      end;var
      Form1: TForm1;implementation{$R *.dfm}
    class function TCommandTypeConvert.CommandToString(
      ACommand: TCommandType): string;
    begin
      Result := GetEnumName(TypeInfo(TCommandType),Ord(ACommand));
    end;class function TCommandTypeConvert.StringToCommand(
      const AStrCommand: string): TCommandType;
    begin
      Result := TCommandType(GetEnumValue(TypeInfo(TCommandType), AStrCommand));
    end;procedure TForm1.Button1Click(Sender: TObject);//函数应用:
    var v: TCommandType;
    begin
      v:=ctAdd;
      //枚举类型的值得到数字:
      showmessage(inttostr(ord(v)));
      //数字得到枚举类型值的名:
      showmessage(TCommandTypeConvert.CommandToString(TCommandType(1)));
    end;end.
      

  7.   

    来个更直接的:unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls ;
    type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;type
      TCommandType = (ctEmptyCommand,ctAdd,ctModify);var
      Form1: TForm1;implementationuses TypInfo;{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);//函数应用:
    var v: TCommandType;
        v_int:integer;
    begin
      v:=ctAdd;
      v_int:=2;
      //枚举类型的值得到数字:
      showmessage(inttostr(ord(v)));
      //数字得到枚举类型值的名:
      showmessage( GetEnumName(TypeInfo(TCommandType),v_int));
    end;end.