Ciao Moreno, in questo codice
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
ComboBox1.DataSource = [Enum].GetNames(GetType(DistanzeFiliali))
ComboBox2.DataSource = [Enum].GetNames(GetType(ComponentiCromatiche))
End Sub
Private Sub ComboBox1_SelectedValueChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedValueChanged
Dim xd As DistanzeFiliali = [Enum].GetValues(GetType(DistanzeFiliali))(ComboBox1.SelectedIndex)
Label1.Text = CInt(xd)
End Sub
Private Sub ComboBox2_SelectedValueChanged(sender As Object, e As EventArgs) Handles ComboBox2.SelectedValueChanged
Label2.Text = ComboBox2.SelectedIndex
End Sub
End Class
Public Enum DistanzeFiliali As Integer
Roma = 432
Milano = 749
Torino = 876
End Enum
Public Enum ComponentiCromatiche As Integer
Rosso = 0
Verde = 1
Blu = 2
End Enum
vengono utilizzate due enumerazioni. I valori numerici di DistanzeFiliali non sono in successione mentre quelli di ComponentiCromatiche si. Questa differenza comporta che, per ottenere il valore numerico di un membro dell'enumerazione dalla selezione tramite ComboBox, come si vede dal codice, si debba implementare un codice più complesso nel caso di DistanzeFiliali e più semplice nel caso di ComponentiCromatiche.
E' comunque vero che il codice utilizzato per ottenere il valore numerico di DistanzeFiliali funzionerebbe anche per ComponentiCromatiche.
Sarà il caldo
, che mi porta a fare queste considerazioni che forse sono inutili?.
Comunque, se dovesse risultare interessante, di seguito uno script di esempio di utilizzo di trasformazione di una enumerazione in una lista di oggetti di tipo MembroEnumerazione.
Molto interessante l'esempio di StackOverflow.
Ciao, Grazie.
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
ComboBox1.DataSource = MembroDiEnumerazione.DaEnumerazioneALista(GetType(DistanzeFiliali))
ComboBox1.DisplayMember = "ValoreAlfanumerico"
ComboBox1.ValueMember = "ValoreNumerico"
End Sub
Private Sub ComboBox1_SelectedValueChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedValueChanged
Dim xd As DistanzeFiliali = [Enum].GetValues(GetType(DistanzeFiliali))(ComboBox1.SelectedIndex)
Label1.Text = CInt(xd)
End Sub
End Class
Public Class MembroDiEnumerazione
Private _ValoreAlfanumerico As String
Private _ValoreNumerico As Long
Public Sub New(n As String, v As Long)
Me._ValoreAlfanumerico = n
Me._ValoreNumerico = v
End Sub
Public ReadOnly Property ValoreAlfanumerico As String
Get
Return Me._ValoreAlfanumerico
End Get
End Property
Public ReadOnly Property ValoreNumerico As Long
Get
Return Me._ValoreNumerico
End Get
End Property
Public Shared Function DaEnumerazioneALista(ten As Type) As List(Of MembroDiEnumerazione)
Dim l As New List(Of MembroDiEnumerazione)
Dim vv As Long = Nothing
For Each v As Object In ten.GetEnumValues
vv = CLng(v)
l.Add(New MembroDiEnumerazione(ten.GetEnumName(vv), vv))
Next
Return l
End Function
End Class
Public Enum DistanzeFiliali As Short
Roma = 432
Milano = 749
Torino = 876
End Enum