Net : Listview qui intercepte pas le selected

Fermé
whombat - 30 oct. 2011 à 18:47
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 - 9 nov. 2011 à 14:14
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
6 nov. 2011 à 16:25
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 Date d'inscription mercredi 12 octobre 2005 Statut Membre Dernière intervention 19 novembre 2011
31 oct. 2011 à 10:21
Personne pour m'aider ?
0
Toujours personne pour m'aider ?

Je suis sûr que ça a déjà dû arriver à quelqu'un...
0
Utilisateur anonyme
2 nov. 2011 à 12:48
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
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
3 nov. 2011 à 12:23
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
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
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
9 nov. 2011 à 13:40
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 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
9 nov. 2011 à 13:52
Bonjour,
C'est quand tu clic une deuxième fois sur la même ligne ?
0
Utilisateur anonyme
9 nov. 2011 à 13:57
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 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
9 nov. 2011 à 14:14
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