Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Question très difficile avec Listviews

7 réponses
Avatar
Bismark Prods
Bonjour tout le monde,

Aujourd'hui je vous expose un très gros problème que je vis actuellement sur
une application quasi terminée.

Nous avons plusieurs listviews qui sont automatiquement mis à jour approx.
toutes les 2 secondes des lignes sont retirées, d'autres sont ajoutées ou
tout simplement les informations de certaines lignes sont modifiées.

Le problème qui m'occupe est que l'utilisateur travail avec ces informations
et à chaque fois qu'une mise à jour arrive, cela réinitialise la liste au
début et on perd la ligne sélectionée.

Avez-vous une idée de comment on pourrait solutionner ce problème ?

Merci d'avance

7 réponses

Avatar
jdd deschamps
1. Créer une listview tampon qui est mise à jour toutes les deux secondes
ne mettre la listview de l'utilisateur à jour que quand elle perd le
focus
OU
2. avant de mettre la listview à jour, observer la position du curseur
après mise à jour, replacer le curseur au bon endroit


--
Pierre-Louis Deschamps
FAQ Visual Basic : http://faq.vb.free.fr/
Almicantarat : http://perso.wanadoo.fr/jdd.deschamps
Logiciel gratuit de navigation astronomique

"Bismark Prods" a écrit dans le message de
news:%
Bonjour tout le monde,

Aujourd'hui je vous expose un très gros problème que je vis actuellement


sur
une application quasi terminée.

Nous avons plusieurs listviews qui sont automatiquement mis à jour approx.
toutes les 2 secondes des lignes sont retirées, d'autres sont ajoutées ou
tout simplement les informations de certaines lignes sont modifiées.

Le problème qui m'occupe est que l'utilisateur travail avec ces


informations
et à chaque fois qu'une mise à jour arrive, cela réinitialise la liste au
début et on perd la ligne sélectionée.

Avez-vous une idée de comment on pourrait solutionner ce problème ?

Merci d'avance




Avatar
Bismark Prods
non malheureusement ce sont de très bonnes idées mais c'est irréalisable.
Simplement parce que la mise à jour est "automatique". Impossible de savoir
prédire quand une mise à jour va arriver.

"jdd deschamps" a écrit dans le message de
news:
1. Créer une listview tampon qui est mise à jour toutes les deux secondes
ne mettre la listview de l'utilisateur à jour que quand elle perd le
focus
OU
2. avant de mettre la listview à jour, observer la position du curseur
après mise à jour, replacer le curseur au bon endroit


--
Pierre-Louis Deschamps
FAQ Visual Basic : http://faq.vb.free.fr/
Almicantarat : http://perso.wanadoo.fr/jdd.deschamps
Logiciel gratuit de navigation astronomique

"Bismark Prods" a écrit dans le message de
news:%
> Bonjour tout le monde,
>
> Aujourd'hui je vous expose un très gros problème que je vis actuellement
sur
> une application quasi terminée.
>
> Nous avons plusieurs listviews qui sont automatiquement mis à jour


approx.
> toutes les 2 secondes des lignes sont retirées, d'autres sont ajoutées


ou
> tout simplement les informations de certaines lignes sont modifiées.
>
> Le problème qui m'occupe est que l'utilisateur travail avec ces
informations
> et à chaque fois qu'une mise à jour arrive, cela réinitialise la liste


au
> début et on perd la ligne sélectionée.
>
> Avez-vous une idée de comment on pourrait solutionner ce problème ?
>
> Merci d'avance
>
>



Avatar
Guy Detienne
Re ;O)

Ah ok ! Mais il fallait le préciser cela ...
Dans ton cas, j'utiliserais un timer puisque tu ne peux intervenir sur le
moment où il y aura une mise à jour.

Dans le timer je comparerais le nombre d'élément du listview (tous les x
temps) avec une variable tampon 'oldCount '. Lorsque le nombre d'item du
listview est différent de oldCount alors cela signifie qu'il y a eu
changement et c'est là que l'on intervient... C'est juste une piste à
explorer pour les ajouts et les retraits...

Private lngoldCount As Long
Private lngOldIndex as Long

Private Sub Timer1_Timer()

If Me.ListView1.ListItems.Count <> lngoldCount Then
Me.ListView1.ListItems(lngOldIndex).EnsureVisible
Me.ListView1.ListItems(lngOldIndex).Selected = True
lngoldCount = Me.ListView1.ListItems.Count
lngOldIndex= ListView1.SelectedItem.Index
End If

End Sub


Bonne prog

Guy DETIENNE
___________________________________
Tchao.net: L'informatique à votre dimension
http://www.tchao.net
Veuillez répondre dans le newsgroup afin d'en faire bénéficier tout le
monde.
Please reply only to the newsgroup so that others can benefit.
___________________________________
Visual Basic & Microsoft Access
http://www.vbfrance.com
http://www.mvps.org/access
http://www.mvps.org/vbnet
___________________________________

"Bismark Prods" a écrit dans le message de news:
#$
non malheureusement ce sont de très bonnes idées mais c'est irréalisable.
Simplement parce que la mise à jour est "automatique". Impossible de


savoir
prédire quand une mise à jour va arriver.

"jdd deschamps" a écrit dans le message de
news:
> 1. Créer une listview tampon qui est mise à jour toutes les deux


secondes
> ne mettre la listview de l'utilisateur à jour que quand elle perd le
> focus
> OU
> 2. avant de mettre la listview à jour, observer la position du curseur
> après mise à jour, replacer le curseur au bon endroit
>
>
> --
> Pierre-Louis Deschamps
> FAQ Visual Basic : http://faq.vb.free.fr/
> Almicantarat : http://perso.wanadoo.fr/jdd.deschamps
> Logiciel gratuit de navigation astronomique
>
> "Bismark Prods" a écrit dans le message de
> news:%
> > Bonjour tout le monde,
> >
> > Aujourd'hui je vous expose un très gros problème que je vis


actuellement
> sur
> > une application quasi terminée.
> >
> > Nous avons plusieurs listviews qui sont automatiquement mis à jour
approx.
> > toutes les 2 secondes des lignes sont retirées, d'autres sont ajoutées
ou
> > tout simplement les informations de certaines lignes sont modifiées.
> >
> > Le problème qui m'occupe est que l'utilisateur travail avec ces
> informations
> > et à chaque fois qu'une mise à jour arrive, cela réinitialise la liste
au
> > début et on perd la ligne sélectionée.
> >
> > Avez-vous une idée de comment on pourrait solutionner ce problème ?
> >
> > Merci d'avance
> >
> >
>




Avatar
François Picalausa
Bonjour/soir,

Au pire, on peut savoir quand les modifications se produisent en sous
classant le contrôle pour récupérer les messages correspondants:
http://msdn.microsoft.com/library/en-us/shellcc/platform/commctls/listview/messages/lvm_deleteitem.asp
http://msdn.microsoft.com/library/en-us/shellcc/platform/commctls/listview/messages/lvm_setitemtext.asp
http://msdn.microsoft.com/library/en-us/shellcc/platform/commctls/listview/messages/lvm_insertitem.asp

--
François Picalausa (MVP VB)
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com


Philippe ILLINGER wrote:
Bonjour,

"Bismark Prods" wrote in message
news:%23$
non malheureusement ce sont de très bonnes idées mais c'est
irréalisable. Simplement parce que la mise à jour est "automatique".
Impossible de savoir prédire quand une mise à jour va arriver.



Excuse, mais je ne comprend pas !!!

Pour mettre a jour, il faut rentrer dans le control, on peut donc en
recuperer des infos !!!

Best Regards


"jdd deschamps" a écrit dans le message de
news:
1. Créer une listview tampon qui est mise à jour toutes les deux
secondes ne mettre la listview de l'utilisateur à jour que quand
elle perd le focus
OU
2. avant de mettre la listview à jour, observer la position du
curseur après mise à jour, replacer le curseur au bon endroit


--
Pierre-Louis Deschamps
FAQ Visual Basic : http://faq.vb.free.fr/
Almicantarat : http://perso.wanadoo.fr/jdd.deschamps
Logiciel gratuit de navigation astronomique

"Bismark Prods" a écrit dans le message de
news:%
Bonjour tout le monde,

Aujourd'hui je vous expose un très gros problème que je vis
actuellement sur une application quasi terminée.

Nous avons plusieurs listviews qui sont automatiquement mis à jour
approx. toutes les 2 secondes des lignes sont retirées, d'autres
sont ajoutées ou tout simplement les informations de certaines
lignes sont modifiées.

Le problème qui m'occupe est que l'utilisateur travail avec ces
informations et à chaque fois qu'une mise à jour arrive, cela
réinitialise la liste au début et on perd la ligne sélectionée.

Avez-vous une idée de comment on pourrait solutionner ce problème ?

Merci d'avance








Avatar
ng
Salut,
Je viens d'avoir une idée un peu tordue pour résoudre le problème, voilà :


il faudrait ajouter un controle utilisateur à ton projet dans lequel tu mets
une listview, ensuite tu la redimmensionne sur le usercontrol_resize de
facon à ce qu'elle prenne toute la place... puis tu remet tout les
événements, propriétés et méthodes (ou seulement celles qui t'interessent)
en ajoutant les événement OnAddItem, OnDeleteItem etc... pour cela il te
suffira de rajouter un RaiseEvent dans ton Additem de redirrection, et enfin
il te suffit juste d'utiliser le usercontrol à la place de tes listviews...
tu aura alors les nouveaux événements voulus...

bon en fait apres avoir reflechis 2 secondes je pense que ca va etre un peu
long à mettre en oeuvre... je laisse qd mm le message, vu qu'il est déjà
tapé... lol

Nicolas.

"Bismark Prods" a écrit dans le message de news:
#
Bonjour tout le monde,

Aujourd'hui je vous expose un très gros problème que je vis actuellement


sur
une application quasi terminée.

Nous avons plusieurs listviews qui sont automatiquement mis à jour approx.
toutes les 2 secondes des lignes sont retirées, d'autres sont ajoutées ou
tout simplement les informations de certaines lignes sont modifiées.

Le problème qui m'occupe est que l'utilisateur travail avec ces


informations
et à chaque fois qu'une mise à jour arrive, cela réinitialise la liste au
début et on perd la ligne sélectionée.

Avez-vous une idée de comment on pourrait solutionner ce problème ?

Merci d'avance




Avatar
Christophe
bonjour,

un petit extrait de la MSDN

"La valeur de la propriété Index de l'objet peut changer lorsque les objets
de la collection sont retriés, notamment lorsque vous attribuez la valeur
True à la propriété Sorted. Si vous souhaitez que la propriété Index change
dynamiquement, il peut être préférable de faire référence aux objets d'une
collection en utilisant la propriété Key."

Christophe V.


"Guy Detienne" a écrit dans le message de news:

Salut ;O)

Comme le dit jdd, avant toute mise à jour, retenir l'index de la ligne
actuellement sélectionnée. En ensuite après la mise à jour, la
resélectionner.

Exemple:

Dim lngOldIndex as Long

lngOldIndex= ListView1.SelectedItem.Index

'La Mise à jour

Me.ListView1.ListItems(lngOldIndex).EnsureVisible
Me.ListView1.ListItems(lngOldIndex).Selected = True

Ca irait ca ?

Aussi, l'index risque de changer si des lignes sont intercalées (je ne


sais
pas si c'est le cas). Donc, il faudra plutôt retenir la clé de l'élément


en
cours (s'il y en a une) ou son texte. Utilise la méthode FindItem pour
rechercher un élément de la liste.

Bonne prog'

Guy DETIENNE

"Bismark Prods" a écrit dans le message de news:
#
> Bonjour tout le monde,
>
> Aujourd'hui je vous expose un très gros problème que je vis actuellement
sur
> une application quasi terminée.
>
> Nous avons plusieurs listviews qui sont automatiquement mis à jour


approx.
> toutes les 2 secondes des lignes sont retirées, d'autres sont ajoutées


ou
> tout simplement les informations de certaines lignes sont modifiées.
>
> Le problème qui m'occupe est que l'utilisateur travail avec ces
informations
> et à chaque fois qu'une mise à jour arrive, cela réinitialise la liste


au
> début et on perd la ligne sélectionée.
>
> Avez-vous une idée de comment on pourrait solutionner ce problème ?
>
> Merci d'avance
>
>




Avatar
Bismark Prods
De toutes les propositions ! c'est celle qui me séduit le plus car cela va
résoudre également d'autre problèmes liés ! Merci bien !


"ng" a écrit dans le message de
news:OWQw%
Salut,
Je viens d'avoir une idée un peu tordue pour résoudre le problème, voilà :


il faudrait ajouter un controle utilisateur à ton projet dans lequel tu


mets
une listview, ensuite tu la redimmensionne sur le usercontrol_resize de
facon à ce qu'elle prenne toute la place... puis tu remet tout les
événements, propriétés et méthodes (ou seulement celles qui t'interessent)
en ajoutant les événement OnAddItem, OnDeleteItem etc... pour cela il te
suffira de rajouter un RaiseEvent dans ton Additem de redirrection, et


enfin
il te suffit juste d'utiliser le usercontrol à la place de tes


listviews...
tu aura alors les nouveaux événements voulus...

bon en fait apres avoir reflechis 2 secondes je pense que ca va etre un


peu
long à mettre en oeuvre... je laisse qd mm le message, vu qu'il est déjà
tapé... lol

Nicolas.

"Bismark Prods" a écrit dans le message de news:
#
> Bonjour tout le monde,
>
> Aujourd'hui je vous expose un très gros problème que je vis actuellement
sur
> une application quasi terminée.
>
> Nous avons plusieurs listviews qui sont automatiquement mis à jour


approx.
> toutes les 2 secondes des lignes sont retirées, d'autres sont ajoutées


ou
> tout simplement les informations de certaines lignes sont modifiées.
>
> Le problème qui m'occupe est que l'utilisateur travail avec ces
informations
> et à chaque fois qu'une mise à jour arrive, cela réinitialise la liste


au
> début et on perd la ligne sélectionée.
>
> Avez-vous une idée de comment on pourrait solutionner ce problème ?
>
> Merci d'avance
>
>