2017-04-21 6 views
1

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

Je possède ce savoir quand l'élément sélectionné sur mon combobox est modifié:

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 est le résultat sur la sortie, lorsque le 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à avait/résolu ce problème?

Cordialement, Fabien

+0

Quel est le code de _initBoxesLocation_? Il semble que vous changiez d'une certaine façon le SelectedIndex dans cette fonction. S'il vous plaît [modifier] votre question en ajoutant le code – Steve

+3

Si vous "effacez/remplissez les comboboxes" alors l'élément sélectionné sera supprimé, et le 'SelectedIndex' réinitialisé à -1 -1 –

+0

En fait, le premier élément est à l'index 0. Donc' If (ComboBoxSite.SelectedIndex <> 0) Then' ne passera pas lorsque vous passerez du second index au premier. Était-ce voulu? – djv

Répondre

0

Merci pour vos réponses!

En effet Steve et A Friend le problème venait de la fonction initBoxesLocation. Dans cette fuction, je nettoyais 4 comboboxes, puis j'ai ajouté 1 objet sur chaque.

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

edit: Oui bien sûr, une fois que mes comboboxes ont refait, je n'ai pas encore 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 

la fonction I divisé initBoxesLocation(), en appelant un ou une autre fonction remise à zéro en fonction du combobox changé, je avais besoin en fait de ne pas les appeler.

Maintenant ça marche!

Cordialement Fabien

0

indices de données sont non négatifs. L'index -1 ne représente aucune sélection. Si vous recherchez un index valide, vérifiez 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

ComboBox.SelectedIndex Propriété

Propriété Valeur
Type: System.Int32 Un index de base zéro de l'élément sélectionné.
Une valeur négative (-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 la seconde, alors la première, voulez-vous toujours l'ignorer?

0

Si aucun élément n'est sélectionné, -1 sera renvoyé. C'est 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 la première tranche qui ne devrait pas être sélectionnée, vous pouvez vérifier pour vous assurer qu'il 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