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);