Je développe une application vb.net et j'ai des problèmes avec les comboboxes.

J'ai ceci pour savoir quand l'élément sélectionné sur ma combobox est changé:

Private Sub ComboBoxSite_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBoxSite.SelectedIndexChanged
    If (ComboBoxSite.SelectedIndex <> 0) Then 'If it is not the default value
        Console.WriteLine("ActionListenerIndex = {0}", ComboBoxSite.SelectedIndex) 'To debug
        RequestAccesv2(0)
    End If
End Sub

Et la fonction RequestAccessv2 ()

Private Sub RequestAccesv2(taille As Integer)
    initBoxesLocation() 'A function that clear/refill 4 comboBoxes
    Console.WriteLine("SELECTED INDEX SITE : {0}", ComboBoxSite.SelectedIndex)
        Select Case taille
            Case 0 ..... 'Some database treatment

End Sub

Et il y a le résultat sur la sortie, lorsque la deuxième fonction est appelée, je n'ai pas le même selectedIndex:

ActionListenerIndex = 2
SELECTED INDEX SITE : -1 'Does it means thas nothing is selected ?

Avez-vous déjà eu / résolu ce problème?

Cordialement, Fabien

1
Fabien 21 avril 2017 à 15:42

3 réponses

Meilleure réponse

Merci pour vos réponses!

En effet Steve et A Friend le problème venait de la fonction initBoxesLocation. Dans cette fonction, j'effaçais 4 comboboxes, puis j'ai ajouté 1 élément sur chacune.

Je n'ai pas vraiment compris d'où venait le problème.

Edit: Oui bien sûr, une fois mes comboboxes refilées, je n'ai plus sélectionné un élément donc il y a le problème.

Private Sub initBoxesLocation()
    Console.WriteLine("initialisation entete")
    initBoxEnteteSite()
    initBoxEnteteBuilding()
    initBoxEnteteModule()
    initBoxEnteteRoom()
End Sub

J'ai divisé la fonction initBoxesLocation (), en appelant l'une ou l'autre fonction de réinitialisation en fonction de la liste déroulante modifiée, je devais en fait ne pas les appeler toutes.

Maintenant ça marche !

Cordialement Fabien

0
Fabien 24 avril 2017 à 07:03

Lorsqu'aucun élément n'est sélectionné, -1 sera renvoyé. Voici ce qui est généralement vérifié:

Private Sub ComboBoxSite_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBoxSite.SelectedIndexChanged
    If (ComboBoxSite.SelectedIndex <> -1) Then ' If something is selected
        Console.WriteLine("ActionListenerIndex = {0}", ComboBoxSite.SelectedIndex) 'To debug
        RequestAccesv2(0)
    End If
End Sub

Si vous avez une valeur dans le premier emplacement qui ne doit pas être sélectionnée, vous pouvez vérifier que c'est> = 1 à la place:

Private Sub ComboBoxSite_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBoxSite.SelectedIndexChanged
    If (ComboBoxSite.SelectedIndex >= 1) Then ' If it is not the default value at index 0 (zero), and something is selected
        Console.WriteLine("ActionListenerIndex = {0}", ComboBoxSite.SelectedIndex) 'To debug
        RequestAccesv2(0)
    End If
End Sub
0
Idle_Mind 21 avril 2017 à 14:41

Les indices de données ne sont pas négatifs. L'index -1 ne représente aucune sélection. Si vous recherchez quand un index valide est sélectionné, recherchez 0 ou plus.

Private Sub ComboBoxSite_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBoxSite.SelectedIndexChanged
    If (ComboBoxSite.SelectedIndex >= 0) Then 'If it is not the default value
        Console.WriteLine("ActionListenerIndex = {0}", ComboBoxSite.SelectedIndex) 'To debug
        RequestAccesv2(0)
    End If
End Sub

Voir MSDN: https://msdn.microsoft.com/en-us/library/system.windows.forms.combobox.selectedindex(v=vs.110).aspx

Propriété ComboBox.SelectedIndex

Valeur de la propriété
Type: System.Int32 Un index de base zéro de l'élément actuellement sélectionné.
Une valeur négative de un (-1) est renvoyée si aucun élément n'est sélectionné.

Maintenant, vous pouvez ignorer la première valeur, puis utiliser ComboBoxSite.SelectedIndex >= 1. Cependant, si l'utilisateur sélectionne le second, puis le premier, voulez-vous toujours l'ignorer?

0
djv 21 avril 2017 à 14:41