résultat des tests avec les contrôles list et un objet avec ou sans fonction ToString()
Alors j'ai fait quelques tests avec la classe suivante :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
| Public Class Test
Public Property Id As Integer
Public Property Text As String
Public Sub New(i As Integer, t As String)
Id = i
Text = t
End Sub
Public Overrides Function ToString() As String
Return Text
End Function
End Class |
Si je fais ceci :
Code:
1 2 3 4 5 6 7 8
| Dim tests As New List(Of Test)
tests.Add(New Test(0, "blabla"))
tests.Add(New Test(1, "truc"))
tests.Add(New Test(2, "machin"))
For Each t As Test In tests
ComboBox1.Items.Add(t)
Next |
C'est comme Pol l'a dit. Si ToString est surchargé, ça affiche son résultat sinon ça affiche le nom de la classe.
Si à la place de mettre les objets dans Items je fais ComboBox1.DataSource = tests, ça se comporte pareil.
Par contre, si j'ajoute un ValueMember comme ceci : ComboBox1.ValueMember = "Id", ça affiche la propriété Id de la classe (que ToString soit surchargée ou non).
Si maintenant j'ajoute un DisplayMember, en mettant "Text", ça affiche sans surprise le texte. Si je mets "ToString" alors qu'elle n'est pas surchargée, ça affiche le nom de la classe sinon, ça affiche le résultat de ToString.
C'est clair ? ^^