Supprimer un nom dans Combobox1si déjà présent dans Combo2

Résolu
Tempus01 Messages postés 81 Date d'inscription mercredi 6 janvier 2021 Statut Membre Dernière intervention 27 septembre 2022 - Modifié le 19 août 2022 à 14:44
vb95 Messages postés 3473 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 30 avril 2024 - 25 août 2022 à 12:23

Bonjour le forum,

Je bloque sur un petit code qui devrait me permettre de supprimer un nom dans la liste déroulante de ma Combobox 2 si celui-ci est déjà présent dans ma Combobox1.

J'ai cette erreur qui s'affiche =>la valeur  -1 n'est pas valide pour l'index
 voici le code.

[CODE]    Me.Boite1COMBO.SelectedItem = 0
        Dim selectedItem = CType(Boite1COMBO.SelectedItem, String(CStr(Boite1COMBO.SelectedItem)))
            Dim resultIndex As Integer = Boite2COMBO.FindStringExact([/CODE]


Merci pour votre aide.

22 réponses

Whismeril Messages postés 19035 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 1 mai 2024 656
24 août 2022 à 18:47

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

1
vb95 Messages postés 3473 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 30 avril 2024 169
Modifié le 25 août 2022 à 06:44

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 )


1
Whismeril Messages postés 19035 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 1 mai 2024 656
25 août 2022 à 07:03

Bonjour 

en fait je l'ai codé en C# et passé dans le traducteur, qui a zappé les handles ...

0
dysorthographie Messages postés 92 Date d'inscription jeudi 27 janvier 2022 Statut Membre Dernière intervention 3 avril 2024 5
Modifié le 22 août 2022 à 15:41

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? 

0
Tempus01 Messages postés 81 Date d'inscription mercredi 6 janvier 2021 Statut Membre Dernière intervention 27 septembre 2022 2
23 août 2022 à 18:39

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

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Whismeril Messages postés 19035 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 1 mai 2024 656
23 août 2022 à 19:28

Comment l'utilisateur rentre t il des produits dans les combox box?


0
Tempus01 Messages postés 81 Date d'inscription mercredi 6 janvier 2021 Statut Membre Dernière intervention 27 septembre 2022 2
23 août 2022 à 19:56

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)
0
Whismeril Messages postés 19035 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 1 mai 2024 656
23 août 2022 à 21:41

Je ne comprends, si le produit est déjà dans la comboBox, en cliquant dessus, tu ne peux pas l'ajouter....


0
Tempus01 Messages postés 81 Date d'inscription mercredi 6 janvier 2021 Statut Membre Dernière intervention 27 septembre 2022 2
24 août 2022 à 09:00

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.  

0
Whismeril Messages postés 19035 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 1 mai 2024 656
24 août 2022 à 09:37

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 ?


0
Tempus01 Messages postés 81 Date d'inscription mercredi 6 janvier 2021 Statut Membre Dernière intervention 27 septembre 2022 2
24 août 2022 à 11:11

Les 2 Combo box sont nécessaires à l'utilisateur .

0
Whismeril Messages postés 19035 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 1 mai 2024 656
24 août 2022 à 11:53

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?


0
Tempus01 Messages postés 81 Date d'inscription mercredi 6 janvier 2021 Statut Membre Dernière intervention 27 septembre 2022 2
24 août 2022 à 13:00

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.

0
Whismeril Messages postés 19035 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 1 mai 2024 656
24 août 2022 à 13:04

Donc l'utilisateur peut choisir le 2eme produit avant le premier ?


0
Tempus01 Messages postés 81 Date d'inscription mercredi 6 janvier 2021 Statut Membre Dernière intervention 27 septembre 2022 2
24 août 2022 à 14:49

Oui, c'est ça car il y a une combinaison/ imbrication qui est possible entre les produits

0
Whismeril Messages postés 19035 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 1 mai 2024 656
24 août 2022 à 17:33

Et s'il choisit le 2eme produit d'abord, faut-il aussi l'empêcher de le choisir comme premier produit ?


0
Tempus01 Messages postés 81 Date d'inscription mercredi 6 janvier 2021 Statut Membre Dernière intervention 27 septembre 2022 2
24 août 2022 à 18:21

Oui, il faut l'empêcher dans ce sens aussi.

0
Tempus01 Messages postés 81 Date d'inscription mercredi 6 janvier 2021 Statut Membre Dernière intervention 27 septembre 2022 2
24 août 2022 à 21:14

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()
0
Whismeril Messages postés 19035 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 1 mai 2024 656
24 août 2022 à 22:09

Essaye 

(New Object() {Me.comboBox1.SelectedItem.ToString()}).ToList()

0
Whismeril Messages postés 19035 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 1 mai 2024 656
24 août 2022 à 22:18

Ou plutôt 

(New String() {Me.comboBox1.SelectedItem.ToString()}).ToList()

A condition bien sûr que tes combobox soient remplies avec des string

0
Tempus01 Messages postés 81 Date d'inscription mercredi 6 janvier 2021 Statut Membre Dernière intervention 27 septembre 2022 2
24 août 2022 à 22:33

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

0
Tempus01 Messages postés 81 Date d'inscription mercredi 6 janvier 2021 Statut Membre Dernière intervention 27 septembre 2022 2
25 août 2022 à 07:56

Bonjour à vous deux, 

C'est bon le code fonctionne aussi de mon côté, pour moi c'est parfait.

Un grand merci.

0
Rejoignez-nous