Hello,
j'ai une combo que je remplie sans passer par un datasource (je la remplie à la main), je n'ai pas de .tag par item ...
Comment puis je stocker un id par item hormis faire une liste à coté ...
Merci.
Hello,
j'ai une combo que je remplie sans passer par un datasource (je la remplie à la main), je n'ai pas de .tag par item ...
Comment puis je stocker un id par item hormis faire une liste à coté ...
Merci.
la question a étée posée il y a tres peu de temps fait une recherche
j'ai bien évidemment fait une recherche avant de posté.
Cependant, soit je me débrouille mal soit la recherche est pas très pratique.
j'ai essayé combo + tag
combo + id
et 2 , 3 autres et rien trouvé.
(c'est le seul défaut de ce forum = sa recherche![]()
Bonjour,
Je suis dans le même cas. Aurais-tu trouvé solution à ce problème RiiiDD ? Je fais aussi des recherches mais je ne trouve pas non plus...
J'ai déjà posté une solution en C# que je copie ici avant délestage ...
Un combobox peut contenir des objets et pas seulement des String.
Pour associer un indice à un nom, il faut utiliser une structure (ou une classe) .
Par exemple :
Pour remplir le ComboBox :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 public struct IndexedValue { public String Nom; public int Index; //Constructeur public IndexedValue(String nom, int index) { this.Nom = nom; this.Index = index; } //surcharger ToString pour l'affichage dans un ComboBox public override String ToString() { return Nom; } }
On peut ensuite récupérer simplement l'index :
Code : Sélectionner tout - Visualiser dans une fenêtre à part this.comboBox1.Items.Add(new IndexedValue("Toto", 123));
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) { //utiliser l'objet sélectionné dans le ComboBox IndexedValue val = (IndexedValue)this.comboBox1.SelectedItem; int index = val.Index; //... }
Ok merci de cette réponse, je vais voir pour adapter ça en Vb.Net !
Voilà, j'ai adapté cette méthode pour Vb.Net. Voici le résultat :
La classe qui représente un item :
Pour ajouter un élément à une combo :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48 ' ' Classe qui permet de remplir une comboBox pour que celle-ci bénéficie ' d'un libellé pour chaque élément et d'un identifiant associé. ' Public Class itemComboBox ' Le libellé de l'item Private sItemLibelle As String ' L'identifiant associé Private iItemId As Integer ' ' Constructeur ' ' @param [String] sLibelle La chaîne du libellé de l'élément à afficher dans la comboBox. ' @param [Integer] iId L'identifiant de l'élément. ' @return [Void] ' Public Sub New(ByVal sLibelle As String, ByVal iId As Integer) If sLibelle = "" Then Throw New Exception("Le libellé de l'élément ne peut être vide.") If iId = 0 Then Throw New Exception("L'identifiant de l'élément ne peut valoir 0.") sItemLibelle = sLibelle iItemId = iId End Sub ' ' Redéfinition de la méthode ToString pour que la comboBox puisse afficher les libellés des éléments. ' ' @param [Void] ' @return [String] Le libellé de l'élément. ' Public Overrides Function ToString() As String Return sItemLibelle End Function ' ' Getter de l'identifiant de l'élément courant. ' ' @param [Void] ' @return [Integer] L'identifiant associé à l'élément. ' Public Function getId() Return iItemId End Function End Class
Ou pour remplir la combo depuis un tableau :
Code : Sélectionner tout - Visualiser dans une fenêtre à part cbMaCombo.Items.Add( New itemComboBox("Toto", 123) )
Pour récupérer l'identifiant associé à l'élément :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Dim aElements = New itemComboBox(iNbElements) {} aElements = chargerElementsDepuisBdd() cbMaCombo.Items.AddRange(aElements)
C'est tout ! Encore merci NicolasG ! Ca fait plaisir d'avoir des réponses de temps en temps !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Private Sub cbMaCombo_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles cbMaCombo.SelectedIndexChanged Dim element As itemComboBox = cbMaCombo.SelectedItem MsgBox(element.getId) End Sub
Partager