Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Combobox ou listbox ?

6 réponses
Avatar
Jacques
Bonjour,

Je dois afficher une liste de titre de livre.J'aimerai afficher le titre
mais aussi récupérer l'id du titre sélectionné. Je parle de l'id dans la
table.Je pensai récupérer l'id et le titre, afficher cela dans deux colonnes
et cacher celle contenant l'id. De cette manière au moment de la sélection ,
je peux récupérer l'id et le titre :-)

Comment faire et quel type de contrôle utiliser ? Ou peut-être y a-t-il une
façon de faire ...!

Merci de vos réponses


Jacques

6 réponses

Avatar
Fred
Dans : news:,
Jacques disait :
Bonjour,



Bonjour,

Je dois afficher une liste de titre de livre.J'aimerai afficher le
titre mais aussi récupérer l'id du titre sélectionné. Je parle de
l'id dans la table.Je pensai récupérer l'id et le titre, afficher
cela dans deux colonnes et cacher celle contenant l'id. De cette
manière au moment de la sélection , je peux récupérer l'id et le
titre :-)
Comment faire et quel type de contrôle utiliser ? Ou peut-être y
a-t-il une façon de faire ...!



Les contrôles List contiennent des objets (pas uniquement des chaînes
comme dans les versions précédentes de vb).
L'affichage de l'objet dans la liste fait appel à la méthode ToString.

Pour ton problème, je te conseille la création d'une classe :

Class Livre
Public Id As Int32
Public Titre As String
'etc ...

Public Sub New(id As Int32, titre As String)
Me.Id = id
Me.Titre = titre
End Sub

Public Overrides Function ToString As String
Return Me.Titre 'on peut ajouter d'autres infos
End Function

End Class

Pour ajouter un livre dans une ListBox :

Dim livre as New Livre
livre.Id = idLivre
livre.Titre = titreLivre
'etc ...

'ou bien

Dim livre As New Livre(idLivre, titreLivre)

'Puis
uneInstanceDeListBox.Items.Add(livre)


Attention : si tu remplis ta liste dans une boucle, n'oublie de créer un
nouvel objet Livre à chaque tour.

exemple en lisant dans une BDD avec Id en colonne 0 et Titre en colonne
1

'....

While dataReader.Read
livre = New Livre( _
dataReader.GetInt32(0),
dataReader.GetString(1))

uneInstanceDeListBox.Items.Add(livre)
End While

'...

--
Fred
http://www.cerber mail.com/?3kA6ftaCvT (enlever l'espace)
Avatar
Jacques
Bonjour,

J'ai essayé ton approche :

While cnnTitre.ObjDataReader.Read()
livreIn = New Livre( _
cnnTitre.ObjDataReader.GetInt32(0),
cnnTitre.ObjDataReader.GetString(1))

Me.lstTitre.Items.Add(livreIn)

End While

J'alimente bien ma listbox mais lorsque je sélectionne un élement de ma
listbox comment récupérer le id??

Jacques

"Fred" a écrit dans le message de
news:eEhNJ$
Dans : news:,
Jacques disait :
Bonjour,



Bonjour,

Je dois afficher une liste de titre de livre.J'aimerai afficher le
titre mais aussi récupérer l'id du titre sélectionné. Je parle de
l'id dans la table.Je pensai récupérer l'id et le titre, afficher
cela dans deux colonnes et cacher celle contenant l'id. De cette
manière au moment de la sélection , je peux récupérer l'id et le
titre :-)
Comment faire et quel type de contrôle utiliser ? Ou peut-être y
a-t-il une façon de faire ...!



Les contrôles List contiennent des objets (pas uniquement des chaînes
comme dans les versions précédentes de vb).
L'affichage de l'objet dans la liste fait appel à la méthode ToString.

Pour ton problème, je te conseille la création d'une classe :

Class Livre
Public Id As Int32
Public Titre As String
'etc ...

Public Sub New(id As Int32, titre As String)
Me.Id = id
Me.Titre = titre
End Sub

Public Overrides Function ToString As String
Return Me.Titre 'on peut ajouter d'autres infos
End Function

End Class

Pour ajouter un livre dans une ListBox :

Dim livre as New Livre
livre.Id = idLivre
livre.Titre = titreLivre
'etc ...

'ou bien

Dim livre As New Livre(idLivre, titreLivre)

'Puis
uneInstanceDeListBox.Items.Add(livre)


Attention : si tu remplis ta liste dans une boucle, n'oublie de créer un
nouvel objet Livre à chaque tour.

exemple en lisant dans une BDD avec Id en colonne 0 et Titre en colonne 1

'....

While dataReader.Read
livre = New Livre( _
dataReader.GetInt32(0),
dataReader.GetString(1))

uneInstanceDeListBox.Items.Add(livre)
End While

'...

--
Fred
http://www.cerber mail.com/?3kA6ftaCvT (enlever l'espace)


Avatar
Fred
Dans : news:,
Jacques disait :
Bonjour,

J'ai essayé ton approche :

While cnnTitre.ObjDataReader.Read()
livreIn = New Livre( _
cnnTitre.ObjDataReader.GetInt32(0),
cnnTitre.ObjDataReader.GetString(1))

Me.lstTitre.Items.Add(livreIn)

End While

J'alimente bien ma listbox mais lorsque je sélectionne un élement de
ma listbox comment récupérer le id??




Dim livre As Livre = Me.lstTitre.SelectedItem

utilise ensuite livre.id



--
Fred
http://www.cerber mail.com/?3kA6ftaCvT (enlever l'espace)
Avatar
Jacques
Merci Fred pour ce tour de passe-passe !
On en apprend tous les jours :-)


Jacques


"Fred" a écrit dans le message de
news:
Dans : news:,
Jacques disait :
Bonjour,

J'ai essayé ton approche :

While cnnTitre.ObjDataReader.Read()
livreIn = New Livre( _
cnnTitre.ObjDataReader.GetInt32(0),
cnnTitre.ObjDataReader.GetString(1))

Me.lstTitre.Items.Add(livreIn)

End While

J'alimente bien ma listbox mais lorsque je sélectionne un élement de
ma listbox comment récupérer le id??




Dim livre As Livre = Me.lstTitre.SelectedItem

utilise ensuite livre.id



--
Fred
http://www.cerber mail.com/?3kA6ftaCvT (enlever l'espace)


Avatar
Fred
Dans : news:,
Jacques disait :
Merci Fred pour ce tour de passe-passe !
On en apprend tous les jours :-)



Allons un peu plus loin alors ;-)

J'ai écrit plus tôt qu'une liste contient des objets : c'est un abus de
langage, en fait elle contient des références (un pointeur amélioré).
Les objets eux-même sont ailleurs.
De ce fait, une liste peut «contenir» n'importe quoi, puisqu'elle ne
contient que des références.

Les items de liste sont définis comme «Object». C'est à dire la classe
de laquelle hérite implicitement tout autre classe.
Entre autre, la classe Object possède la fameuse méthode ToString, donc
toute classe possède aussi la méthode ToString.
Voila pourquoi une liste est capable d'afficher tout objet qu'on lui
confie.

Le seul bémol, c'est que si ToString est parfaitement défini pour les
types de base : Int32, String, Boolean, etc ... pour la plupart des
classes, et surtout celles que l'on crée, elle se contente d'afficher le
type de l'objet.

Ainsi, si dans mon exemple tu enlèves la définition de ToString, ta
liste affichera «NomDuProjet.Livre» autant de fois que tu as ajouté de
livres. C'est le comportement du ToString par défaut. Et c'est pour cela
qu'on déclare notre ToString en «Overrides». Pour qu'elle redéfinisse le
ToString de la classe de base.

Dernier point : lorsqu'on «sort» un objet de la liste (avec SelectItem
par exemple), l'éditeur ne voit qu'un «Object», puisque SelectedItem est
de type Object. Donc il est incapable de proposer d'autres propriétés /
méthodes que celles de la classe Object.
D'où mon tour de passe-passe :-)
Malgré tout, je pense que l'on peut écrire «SelectedItem.id»

--
Fred
http://www.cerber mail.com/?3kA6ftaCvT (enlever l'espace)
Avatar
Jacques
Et bien merci pour ce complément d'informations très intéressant !


Jacques


"Fred" a écrit dans le message de news:

Dans : news:,
Jacques disait :
> Merci Fred pour ce tour de passe-passe !
> On en apprend tous les jours :-)

Allons un peu plus loin alors ;-)

J'ai écrit plus tôt qu'une liste contient des objets : c'est un abus de
langage, en fait elle contient des références (un pointeur amélioré).
Les objets eux-même sont ailleurs.
De ce fait, une liste peut «contenir» n'importe quoi, puisqu'elle ne
contient que des références.

Les items de liste sont définis comme «Object». C'est à dire la classe
de laquelle hérite implicitement tout autre classe.
Entre autre, la classe Object possède la fameuse méthode ToString, donc
toute classe possède aussi la méthode ToString.
Voila pourquoi une liste est capable d'afficher tout objet qu'on lui
confie.

Le seul bémol, c'est que si ToString est parfaitement défini pour les
types de base : Int32, String, Boolean, etc ... pour la plupart des
classes, et surtout celles que l'on crée, elle se contente d'afficher le
type de l'objet.

Ainsi, si dans mon exemple tu enlèves la définition de ToString, ta
liste affichera «NomDuProjet.Livre» autant de fois que tu as ajouté de
livres. C'est le comportement du ToString par défaut. Et c'est pour cela
qu'on déclare notre ToString en «Overrides». Pour qu'elle redéfinisse le
ToString de la classe de base.

Dernier point : lorsqu'on «sort» un objet de la liste (avec SelectItem
par exemple), l'éditeur ne voit qu'un «Object», puisque SelectedItem est
de type Object. Donc il est incapable de proposer d'autres propriétés /
méthodes que celles de la classe Object.
D'où mon tour de passe-passe :-)
Malgré tout, je pense que l'on peut écrire «SelectedItem.id»

--
Fred
http://www.cerber mail.com/?3kA6ftaCvT (enlever l'espace)