D'une part, ça ne me parait pas logique, mais surtout, on risque de tomber dans le cas d'une redondance cyclique, et là ça finit toujours par une stack overflow.
Donc dans un premier temps, je te propose une solution où l'utilisateur est obligé de choisir le 1 en premier.
Une fois le choix fait, il peut choisir le second.
Qu'il ait choisi ou non un second, il peut modifier le choix 1.
Et là, aucun risque de redondance cyclique.
Teste ça, et si finalement ça te convient comme fonctionnement, il vaut mieux rester là-dessus.
Si ça ne te convient pas, on va gratter.
Private listeObjets As List(Of String) Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) listeObjets = New List(Of String) From { "Bonjour", "Hello", "Buenos Dia" } 'liste de tous les objets possibles Me.comboBox1.DataSource = listeObjets 'on binde la liste complète sur le combo 1 Me.comboBox1.SelectedIndex = -1 'pas de sélection par défaut End Sub Private Sub comboBox1_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Me.comboBox2.DataSource = Nothing 'on resete le binding du combobox2, au cas où il y ait déjà eu une sélection If Me.comboBox1.SelectedIndex = -1 Then 'si aucune sélection sur le 1, on bloque le 2 Me.comboBox2.Enabled = False Else 'si une sélection sur le 1 Me.comboBox2.DataSource = listeObjets.Except(New Object() {Me.comboBox1.SelectedItem}).ToList() 'on binde la liste dans la valeur du 1 Me.comboBox2.Enabled = True 'on débloque le 1 End If End Sub
Bonjour à vous deux
voici le code de Whimeril corrigé
Public Class Form1 Private listeObjets As List(Of String) Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load listeObjets = New List(Of String) From {"Bonjour", "Hello", "Buenos Dia", "Guten Tag"} 'liste de tous les objets possibles With ComboBox1 .DataSource = listeObjets 'on binde la liste complète sur le combo 1 .SelectedIndex = -1 'pas de sélection par défaut End With End Sub Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged With ComboBox2 .DataSource = Nothing 'on resete le binding du combobox2, au cas où il y ait déjà eu une sélection If ComboBox1.SelectedIndex = -1 Then 'si aucune sélection sur le 1, on bloque le 2 .Enabled = False Else 'si une sélection sur le 1 .DataSource = listeObjets.Except(New String() {ComboBox1.SelectedItem.ToString}).ToList() 'on binde la liste dans la valeur du 1 .Enabled = True 'on débloque le 1 End If End With End Sub End Class
Cela fonctionne correctement chez moi en remplissant les ComboBox avec des Strings .
J'ai rajouté les Handles aux 2 procédures ( Form_Load et ComboBox1_SelectedIndexChanged )
Bonjour
en fait je l'ai codé en C# et passé dans le traducteur, qui a zappé les handles ...
Bonjour,
comment sont implémenté tes combo? n'est il pas possible d'implémenter la combo2 en fonction des informations déjà présente dans la combo1 plutôt que de biffer les mansions inutile?
Bonjour dysorthograpjie,
Merci pour la proposition, mais je souhaite que l'utilisateur est le choix de rentrer n'importe quel produit dans l'une ou l'autre des combo, mais les différents testes/essais que j'ai effectué pour le moments ne sont pas concluant
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionComment l'utilisateur rentre t il des produits dans les combox box?
En cliquant sur la Combo box avec un liste déroulante
Public Class Objet Boite1COMBO.Items.Add("Objet1") Boite1COMBO.Items.Add("Objet2") Boite1COMBO.Items.Add("Objet3") Boite1COMBO.SelectedItem = Boite1COMBO.Items(0) Boite2COMBO.Items.Add("Objet1") Boite2COMBO.Items.Add("Objet2") Boite2COMBO.Items.Add("Objet3") Boite2COMBO.SelectedItem = Boite2COMBO.Items(0)
Je ne comprends, si le produit est déjà dans la comboBox, en cliquant dessus, tu ne peux pas l'ajouter....
Il y a deux combo box avec les mêmes produits sélectionnables, ce que je souhaiterais faire, c'est si un produit est déjà sélectionné dans la première combo box il n'est plus sélectionnable dans la seconde.
Si tu avais écrit ça dès le début, tu aurais gagné du temps...
Est ce qu'on peut imaginer que le 2eme combo ne soit accessible qu'après avoir fait un choix sur le premier ?
Les 2 Combo box sont nécessaires à l'utilisateur .
Oui, mais est ce qu'on peut lui donner accès à la combo 1 d'abord et une fois le choix fait sur celle ci l'accès à la seconde?
Un 1er choix "produit" en amont fait que les 2 Combo box sont nécessaires, il faut donc que les 2 Combo box soient accessibles.
Donc l'utilisateur peut choisir le 2eme produit avant le premier ?
Oui, c'est ça car il y a une combinaison/ imbrication qui est possible entre les produits
Et s'il choisit le 2eme produit d'abord, faut-il aussi l'empêcher de le choisir comme premier produit ?
Oui, il faut l'empêcher dans ce sens aussi.
Cette solution me convient, cela reste logique, sinon, j'ai testé le code, une erreur apparait, voici la partie qui est soulignée en rouge.
(New Object() {Me.comboBox1.SelectedItem}).ToList()
Essaye
(New Object() {Me.comboBox1.SelectedItem.ToString()}).ToList()
Ou plutôt
(New String() {Me.comboBox1.SelectedItem.ToString()}).ToList()
A condition bien sûr que tes combobox soient remplies avec des string
La même erreur apparait, j'ai essayé
comme conseiller par l'aide VB.net d'ajouter un cast explicite, mais cela plante au démarrage de l'appli
Bonjour à vous deux,
C'est bon le code fonctionne aussi de mon côté, pour moi c'est parfait.
Un grand merci.