2010-10-28 43 views
1

我創建利用TCustomAttribute子類(TEnumAttribute)給每個枚舉附加數據(如果成功的話,這將推動自定義組件,可以查詢枚舉枚舉並相應地填充)。德爾福2010 RTTI:如何interegate /探索含枚舉自定義屬性

 

type 
    TShoppingCartType = (

    [TEnumAttribute(0, 'All')] 
    sctAll, 

    [TEnumAttribute(1, 'Web Shopping Cart')] 
    sctWebShoppingCart, 

    [TEnumAttribute(2, 'Wish List')] 
    sctDefaultWebWishList, 

    [TEnumAttribute(3, 'Custom')] 
    sctWebCustomList 

    ); 
 

我能得到的名稱和值就好了(使用對應的所屬類別GetEnum方法),但我怎麼能在它被定義屬性的枚舉和接入訪問每個價值?

感謝任何信息

回答

3

至於我能看到你只能標註類型與屬性。由於枚舉的值只是一個簡單的序數值,因此您的方法可能不起作用。

如果枚舉值分別爲類型本身是在官方的文檔中描述你將使用TRttiContextTRttiType

http://docwiki.embarcadero.com/RADStudio/XE/en/Extracting_Attributes_at_Run_Time

做它經典的方式似乎更爲合適:

TShoppingCartTypeDescriptions = array[TShoppingCartType] of string; 

... 

Descriptions: TShoppingCartTypeDescriptions; 
Descriptions[sctAll] := 'All'; 
Descriptions[sctWebShippingCart] := 'Web Shopping Cart'; 
// and so on 

可以使用枚舉所有值:

var 
    I: TShoppingCartType; 
begin 

    for I := Low(TShoppingCartType) to High(TShoppingCartType) do 
     // Do something with I 

end; 
+0

謝謝!我可能花了最後6個小時玩弄每個獲得正確值的排列組合。我當時希望有一個「Marco Cantu」的手法,但沒有記錄。 :) – KevinRF 2010-10-28 16:47:08

+0

@KevinRF:沒問題,有時候是最簡單的解決方案。作爲替代方案,您還可以使用字典或其他智能數據結構來解決您的問題。 – 2010-10-28 20:11:31