delphi 如何将枚举值转换为字符串?[复制]

3vpjnl9f  于 12个月前  发布在  其他
关注(0)|答案(2)|浏览(113)

此问题在此处已有答案

Generic functions for converting an enumeration to string and back(5个答案)
8年前关闭。
我知道我以前就能做到这一点,很久以前,所以这一定是可能的。
我想将一个项目(比如组件的align属性alNone)转换为一个可以保存、显示等的字符串。我知道我可以获得字节值并生成自己的文本,但我相信有一种更直接的方法。
比如我想...

var S:string;
S:= somehow(Form.Align);
ShowMessage(S);

字符串
这里的“somehow”是我将表单的align属性的设置转换为一个字符串,比如“alNone”。

umuewwlo

umuewwlo1#

您可以使用RTTI在枚举类型和String之间来回转换:

uses
  RTTI;

procedure TForm40.FormCreate(Sender: TObject);
var
  sAlign: string;
  eAlign: TAlign;
begin
  //Enum to string      
  sAlign := TRttiEnumerationType.GetName(eAlign);
 
  //string to enum
  eAlign := TRttiEnumerationType.GetValue<TAlign>(sAlign);
end;

字符串

ffx8fchx

ffx8fchx2#

Form.Align不是TPersistent的值。它是TAlign的值,是一个枚举类型。
你可以用这段代码将枚举值转换为字符串:

type TEnumConverter = class
public
  class function EnumToInt<T>(const EnumValue: T): Integer;
  class function EnumToString<T>(EnumValue: T): string;
end;

class function TEnumConverter.EnumToInt<T>(const EnumValue: T): Integer;
begin
  Result := 0;
  Move(EnumValue, Result, sizeOf(EnumValue));
end;

class function TEnumConverter.EnumToString<T>(EnumValue: T): string;
begin
  Result := GetEnumName(TypeInfo(T), EnumToInt(EnumValue));
end;

字符串
您需要将System.TypInfo添加到使用中。
这样做可以得到Form.Align作为字符串:

S := TEnumConverter.EnumToString(Form.Align)

相关问题