Bindare i valori di una enumerazione tradotti

A volte può essere necessario mostrare tutti i valori ammessi in un enumerazione all'interno di una comboBox. Il codice per farlo è molto semplice ma la limitazione più grossa sta nel fatto che gli elementi della combo si chiamano nello stesso modo degli elementi dell'enumerazione il che a volte è una cosa che non piace molto ai nostri clienti.

Per esempio se prendiamo l'enumerazione 

public enum Periods
{
   Custom, 
   CurrentMonth,
   LastMonth,
   CurrentYear,
   LastYear
}

Con un semplice istruzione riusciamo a popolare una combo con tutti gli elementi dell'enumerazione

comboBox1.DataSource = Enum.GetNames(typeof (Periods));

e se voglia possiamo riconvertire il valore selezionato in una istanza del nostro tipo con la sintassi

Periods period = (Periods)Enum.Parse(typeof(Periods), comboBox1.SelectedItem.ToString());

L'incoveniente in questo caso è che gli elementi della combo si chiamano come i valori dell'enumerativo. Utilizzando le risorse possiamo introdurre maggiore flessibilità nella gestione dei nomi che vengono visualizzati all'interno della comboBox.
Per cominciare creiamo una risorsa di tipo stringa per ogni elemento della nostra enumerazione

dopo di questo modifichiamo il codice che popola la combo in questo modo

ArrayList list = new ArrayList();
foreach (string name in Enum.GetNames(typeof(Periods)))
{
   list.Add(Resources.ResourceManager.GetString(name))
}
comboBox1.DataSource = list;

mentre per riconvertire il valore selezionato in una istanza del nostro tipo ora lo possiamo fare con questa sintassi

return (Periods)Enum.GetValues(typeof(Periods)).GetValue(_interval.SelectedIndex);

posted @ sabato 5 maggio 2007 18:13

Print
Comments have been closed on this topic.