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



A voir également:

11 réponses

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
whombat Messages postés 191 Statut Membre
 
Personne pour m'aider ?
0
Whombat
 
Toujours personne pour m'aider ?

Je suis sûr que ça a déjà dû arriver à quelqu'un...
0
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

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

Posez votre question
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
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
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
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
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
lermite222 Messages postés 9042 Statut Contributeur 1 191
 
Bonjour,
C'est quand tu clic une deuxième fois sur la même ligne ?
0
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
lermite222 Messages postés 9042 Statut Contributeur 1 191
 
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