请教:枚举类型与数字能否互相转换? TCommandType = (ctEmptyCommand,ctAdd,ctModify);能否根据枚举类型的值得到数字,比如如果为ctAdd,则返回一个数字1(也可能是2),如果数字1,得到的枚举类型为ctAdd请问大家有什么方法可以做到吗? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 可以,不过要对应,比如 ctEmptyCommand是0,后面加一,如果 ctEmptyCommand=2,那么 ctEmptyCommand对应的是2,后面依次加一 可以,不过要对应,比如 ctEmptyCommand是0,后面加一,如果 ctEmptyCommand=2,那么 ctEmptyCommand对应的是2,后面依次加一 谢谢bdmhvar x:TCommandType i:integer;begin if x = ctEmptyCommand then i := 0 else .... //如果枚举类型有好几十个,有好办法写出来吗? if i = 0 then x := ctEmptyCommand else .... //几十个if语句,或许可以用case of,但是万一顺序弄错了,后面的全错了, //有没有类似ord之类的简单方法呢?end; 默认是从0开始的,后面递增,即等价于下面这样:TCommandType = (ctEmptyCommand=0,ctAdd,ctModify);也可以改成TCommandType = (ctEmptyCommand=3,ctAdd,ctModify);取序数用Ord第1种Ord(ctAdd),结果是1第2种Ord(ctAdd),结果是4 先定义常量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; 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. 来个更直接的: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. TStringGrid如何使行的宽度不相同 cxgrid多选合计值问题,高手请进. delphi下字段拆分问题? windowsmediaplay 全屏问题 请问高手一个问题,谢了 怎樣通過代碼關閉另外一個應用程序 TChart中如何实现两唯? 有谁能用最快的方式找到不同操作系统中mspaint.exe文件所在的目录?最好不要搜索目录法! 如何实现多个线程的同步,使用什么做互斥操作啊! 怎样试着打开一个数据库,判断其是否损坏? 简单的代码,为何报EAbstractErr异常 有没有谁遇见过clientdataset的XMLDATA数据不完整!
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;
TCommandType = (ctEmptyCommand=0,ctAdd,ctModify);也可以改成
TCommandType = (ctEmptyCommand=3,ctAdd,ctModify);取序数用Ord
第1种Ord(ctAdd),结果是1
第2种Ord(ctAdd),结果是4
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;
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.
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.