線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2427
推到 Plurk!
推到 Facebook!

如何對列舉和字串互相轉換

 
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-05-18 12:46:08 IP:61.221.xxx.xxx 未訂閱
解決: http://delphi.ktop.com.tw/topic.php?TOPIC_ID=30610 的問題    此作業的最佳解法為利用 RTTI 的方式來進行. 配合 TypInfo 中的 GetEnumvalue 及 GetEnumName 來進行轉換的作業. 列舉為一有序的數列, 第一個列舉數為 0, 可以利用 Ord 來轉型取得其順序, 例如: type TOrdinalType = (otFirst, otSecond, otThird); 其中 Ord(otFirst) = 0, Ord(otSecond) = 1 ..... 接下來就可以利用下面的兩個函式進行互轉的動作.
uses TypInfo;
. .
. .
//由字串轉為列舉
function StrToTOrdinalType(FStr: String): TOrdinalType;
var
  i : integer;
begin
  i := GetEnumValue( TypeInfo(TOrdinalType)  , FStr );
  Result := TOrdinalType(i);
end;    //由列舉轉為字串
function TOrdinalTypeToStr(FOrdinalType: TOrdinalType): String;
begin
  Result := GetEnumName( TypeInfo(TOrdinalType)  , Ord(FOrdinalType));
end;    //測試段:
procedure TForm1.Button3Click(Sender: TObject);
begin
  showmessage(TOrdinalTypeToStr(otFirst));  //檢驗是否可以由 otFirst 轉為 'otFirst'
  if StrToTOrdinalType('otFirst') = otFirst then Showmessage('Right'); //檢驗是否可以由 'otFirst' 轉為 otFirst
end;    
接下來如何應用就看各位的巧思了... 發表人 -
系統時間:2024-05-15 10:31:50
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!