Net : Listview qui intercepte pas le selected

whombat -  
lermite222 Messages postés 9042 Statut Contributeur -
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. Utilisateur anonyme
     
    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
  2. whombat Messages postés 191 Statut Membre
     
    Personne pour m'aider ?
    0
  3. Whombat
     
    Toujours personne pour m'aider ?

    Je suis sûr que ça a déjà dû arriver à quelqu'un...
    0
  4. Utilisateur anonyme
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Whombat
     
    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
  7. Utilisateur anonyme
     
    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
  8. Whombat
     
    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
  9. Whombat
     
    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
  10. Utilisateur anonyme
     
    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
  11. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Bonjour,
    C'est quand tu clic une deuxième fois sur la même ligne ?
    0
  12. Utilisateur anonyme
     
    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. lermite222 Messages postés 9042 Statut Contributeur 1 199
       
      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