Net : Listview qui intercepte pas le selected
whombat
-
lermite222 Messages postés 9042 Statut Contributeur -
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 :
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
-
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 -
-
-
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 -
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. -
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 -
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. -
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 -
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 -
Bonjour,
C'est quand tu clic une deuxième fois sur la même ligne ? -
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