Někde jsem našel tento pěkný příklad, jak položkám enumu přiřadit odlišné popisky.
Dejme tomu že máme enum:
public enum enmDnyVTydnu
{
[Description("Pondělí")]
pondeli,
[Description("Úterý")]
utery,
[Description("Středa")]
streda,
...
}
A teď jen nadefinujeme jednu funkci, která nám bude vytahovat právě tyto popisky:
public static string VratPopis(Enum hodnota)
{
FieldInfo info = hodnota.GetType().GetField(hodnota.ToString());
// zde si vytahneme vsechny popisne atributy
DescriptionAttribute[] atributy =
(DescriptionAttribute[])info.GetCustomAttributes(
typeof(DescriptionAttribute),
false);
// tady si vytahneme prave popis
// Dana polozka mit popis nemusi, pak vratime polozku primo (jako string)
if (atributy!= null && atributy.Length > 0)
return atributy[0].Description;
else
return hodnota.ToString();
}
Pokud toto řešení zkombinujete s použitím obalové třídy pro položky v ComboBoxu, budete mít ucelený přístup k přidávání položek do ComboBoxu pro jakýkoliv typ enumu s tí, že v ComboBoxu se nebudou zobrazovat hodnoty enumu ale právě zástupné popisky.
Hmm, pekne, ale co s lokalizaci, tedy prekladama polozek v ComboBoxu do jinych jazyku?
OdpovědětVymazatPriznam se, ze jsem lokalizaci zatim neresil. Prvni reseni, ktere me napadlo je, ze by v popisku polozky enumu byly i preklady a pri volani funkce pro vytazeni popisku by se argumentem specifikovalo, kterou jazykovou verzi chceme.
OdpovědětVymazat