Net : Listview qui intercepte pas le selected

Bonjour,

J'ai une listview classique avec un label et une icône cliquable. J'ai mis une messagebox pour voir ce qui se passe. Une fois sur 2, la liste intercepte l'index, une fois sur deux elle renvoie 0.
Un tableau, rangé dans l'ordre d'affichage des labels, me donne, en fonction de l'index, le texte du label en fonction d'un paramètre annexe. S'il n'y a pas d'index intercepté, bien sûr il n'y a pas de texte de label renvoyé.
Question, donc, pourquoi mon script ne fonctionne-t-il qu'une fois sur 2 ?

Mon code :


Private Sub ListLangues_SelectedIndexChanged(sender As System.Object, e _
                     AsSystem.EventArgs) Handles ListLangues.SelectedIndexChanged
 
        Dim idx As Integer = 0
        Dim i As Integer = 0
        Dim NouvLang As String = String.Empty

        For i = 0 To ListLangues.Items.Count - 1
            If ListLangues.Items.Item(i).Selected = True Then
                If SensPL = 0 Then             'mon paramètre annexe
                    NouvLang = TAB_LES_PAYS(i)
                Else
                    NouvLang = TAB_LANGUES(i)
                End If
                idx = i
                Exit For
            End If
        Next i

        MessageBox.Show("Vous voulez vraiment changer la langue _
        en " & NouvLang & ",   " & " avec index : " & idx.ToString)

end sub



11 réponses

  1. re:

    Voici un code testé sur VB2010

            Dim idx As Integer = 0
            Dim i As Integer = 0
            Dim NouvLang As String = String.Empty
    
            For i = 0 To lbx_Sources.Items.Count - 1
    
                If (lbx_Sources.SelectedIndex = i) Then
                    If SENSPL = 0 Then             'mon paramètre annexe
                        NouvLang = TAB_LES_PAYS(i)
                    Else
                        NouvLang = TAB_LANGUES(i)
                    End If
                    idx = i
                    Exit For
                End If
    
            Next i
    
            MessageBox.Show("Vous voulez vraiment changer la langue en " & NouvLang & ",   " & " avec index : " & idx.ToString)
    


    Cdt

    Lupin
    1
    1. Toujours personne pour m'aider ?

      Je suis sûr que ça a déjà dû arriver à quelqu'un...
      0
      1. Bonjour,

        Essaie comme ceci :

        For i = 0 To lstObjets.Items.Count - 1
        	If (lstObjets.SelectedIndex = i) Then
        		If SensPL = 0 Then
        			NouvLang = Tables(i)
        		Else
        			NouvLang = Tables(i)
        		End If
        		idx = i
        		Exit For
        	End If
        Next i
        


        Cdt

        Lupin
        0
        1. Désolé. 9a ne ne fonctionne pas. Le deboger me dit que SelectedIndex ne fait pas partie des methodes de S.W.Forms.ListView...

          Mais merci pour t'être intéressé à mon cas.
          0
          1. re:

            Sous quel version développes-tu ?

            Sous VB2008, c'est la propriété [ .Items.Item(i).Selected ] qui n'est pas reconnu !

            Cdt

            Lupin
            0
            1. Je développe (depuis 45 jours) sous VB2010.

              Je pense que j'ai résolu mon problème par un tour de passe passe pas très académique mais...

              En fait, il y a une fois sur deux ou l'interception du Click est à vide. Le programme attend un Click pour quitter son ancien Item puis un second (espacé) pour intercepter le nouvel Item. Je l'ai donc shunté comme suit (et ça fonctionne nickel) :
              
              Private Sub ListLangues_SelectedIndexChanged(sender As System.Object, e _
                                   AsSystem.EventArgs) Handles ListLangues.SelectedIndexChanged
              
              'les 3 lignes rajoutées :
              
                      Static Good As Integer
                      Good = Not Good
                      If Good = 0 Then Exit Sub
               
              'et je reprends mon script
              
                      Dim idx As Integer = 0
                      Dim i As Integer = 0
                      Dim NouvLang As String = String.Empty
              
              .........................
              
              


              Merci de ton intérêt pour mon problème.
              0
              1. Oui, c'est nickel Lupin, et plus simple que mon script (c'est peut-être pour ça que ça fonctionne :).

                Merci pour votre aide.

                Très cordialement,

                Whombat
                0
                1. re:

                  Je suis plutôt endormi ...

                  Tout ce temps là, j'ai testé sur une ListBox.

                  Voici le code pour une ListView :

                  Dim idx As Integer = 0
                  Dim i As Integer = 0
                  Dim NouvLang As String = String.Empty
                  
                  If (lvw_Sources.SelectedIndices.Count > 0) Then
                  	For i = 0 To lvw_Sources.Items.Count - 1
                  		If (lvw_Sources.SelectedIndices(0).Equals(i)) Then
                  			If SensPL = 0 Then	   'mon paramètre annexe
                  				NouvLang = TAB_LES_PAYS(i)
                  			Else
                  				NouvLang = TAB_LANGUES(i)
                  			End If
                  			idx = i
                  			Exit For
                  		End If
                  	Next i
                  
                  	MessageBox.Show("Vous voulez vraiment changer la langue en " & _
                  			NouvLang & ",   " & " avec index : " & idx.ToString)
                  End If
                  


                  Cdt

                  Lupin
                  0
                  1. Contributeur
                    Bonjour,
                    C'est quand tu clic une deuxième fois sur la même ligne ?
                    0
                    1. Bonjour lermite,

                      Je ne comprends pas bien ton intervention, comme Whombat
                      la souligné, j'obtiens le même comportement sur un seul clic !

                      à moins de gérer le [ .SelectedIndices.Count ]

                      Cdt

                      Lupin
                      0
                      1. Contributeur
                        Bonjour Lupin,
                        Effectivement c'est hors de propo, mais quand j'ai ouvert ce topic tout les postes n'était pas afficher, bug CCm ou pas les bonne lunette :D
                        A+
                        0