[Vb] Alimenter facilement un LisBox WinForm

Publié le 11 décembre 2008 par Jeremy.jeanson

Voici un petit exemple qui utilise tout simplement une collection existante (Dictionary) pour alimenter un Listbox. Je poste ceci car il s'agit d'un souci récurant pour les codeurs Vb qui se perdent sur .net.

Dim liste As New Dictionary(Of Int32, String)

liste.Add(1, "Un")
liste.Add(2, "Deux")
liste.Add(3, "Tois")

Me.ListBox1.DisplayMember = "value"
Me.ListBox1.ValueMember = "key"
Me.ListBox1.DataSource = liste.ToList()

Il est possible  d' utiliser tout type de collection, cependant le Dictonary étant l' une des plus simples, autant l'utiliser.

Pour ce qui est des deux String key et value il s'agit des noms des propriétés de l'objet stocké dans le Dictionary. On peut faire la même chose avec toute liste d'objets.

Par exemple :

' Notre classe custom
Public Class Class1

    Private _Id As Int32
    Private _Nom As String

    Public Property Id() As Int32
        Get
            Return _Id
        End Get
        Set(ByVal value As Int32)
            _Id = value
        End Set
    End Property

    Public Property Nom() As String
        Get
            Return _Nom
        End Get
        Set(ByVal value As String)
            _Nom = value
        End Set
    End Property

    Public Overrides Function ToString() As String
        Return String.Concat(_Id, " ", _Nom)
    End Function

End Class

Et l'utilisation avec la propriété Nom, on voit bien que la méthode ToString() n'est  pas utilisée :

Dim liste As New List(Of Class1)

liste.Add(New Class1 With {.Id = 1, .Nom = "Un"})
liste.Add(New Class1 With {.Id = 2, .Nom = "Deux"})
liste.Add(New Class1 With {.Id = 3, .Nom = "Trois"})

Me.ListBox1.DisplayMember = "Nom"
Me.ListBox1.ValueMember = "Id"
Me.ListBox1.DataSource = liste.ToList()