5 votes

Fait défiler la ListView avec la molette de la souris annule parfois le défilement

Je rencontre quelques problèmes avec le listview Win32, et j'espère que quelqu'un a un peu de sagesse. Lorsque vous faites défiler très rapidement (via la roulette), de temps en temps, le listview semble défiler, pour aussitôt revenir à l'élément sélectionné pour qu'il soit en vue. En d'autres termes, la liste annule votre défilement pour vous montrer l'élément sélectionné en haut/en bas de la liste. Je sais que cela semble très douteux, étant donné que les contrôles communs ont été testés maintes et maintes fois partout dans le monde.

Voici comment vous pouvez reproduire le problème :

  1. Chargez un listview en mode rapport avec environ 500 éléments ou plus (le nombre exact n'a pas d'importance, vous voulez juste plusieurs écrans de données).
  2. Sélectionnez un élément dans la liste et rappelez-vous de ce que vous avez sélectionné.
  3. Défilez rapidement la liste vers le bas (vers vous) avec la roulette. Nous essayons de faire défiler l'élément sélectionné hors de la vue le plus rapidement possible. Vous devrez probablement utiliser plus de force que d'habitude sur la roulette. Cela n'arrivera pas toujours. Vous devrez peut-être essayer plusieurs fois.
  4. Soit le défilement se termine normalement, soit il change d'avis à la fin et vous ramène à une vue où l'élément sélectionné est à l'écran.

Ce problème se produit avec les listviews réguliers et virtuels. J'ai testé sur Win32 et C# sur Windows 7 Ultimate.

J'ai créé une petite application WinForms qui montre ce comportement (nécessite .NET Framework 3.5). Si vous préférez ne pas exécuter d'exécutables arbitraires provenant d'étrangers (je comprends), créez une nouvelle application WinForms, ajoutez un listview en mode rapport, ajoutez une colonne, et remplissez la liste dans l'événement de chargement du formulaire avec 500 entiers croissants :

private void Form1_Load(object sender, EventArgs e)
{
    for (int i = 0; i < 500; i++)
    {
        this.listView1.Items.Add(i.ToString());
    }
}

1voto

wj32 Points 4505

J'ai remarqué ce comportement et il semble être intégré dans le contrôle de la vue de la liste. Je ne vois aucune raison pour laquelle cette fonctionnalité serait utile. J'ai créé un sujet de discussion à ce sujet sur les forums Sysinternals il y a quelque temps. Cela pourrait être utile.

0voto

Windows programmer Points 5365

"Je réalise que cela semble très douteux, car les contrôles communs ont été abusés à travers le monde."

ListView n'a pas été tout à fait abusé mais il est en soins intensifs. Utilisez un contrôle différent.

0voto

camous Points 80

Est-ce une vue de liste personnalisée (remplacement du dessin ?) au fait, j'ai rencontré (si j'ai bien compris) le même problème avec une Listbox personnalisée et j'ai trouvé de l'aide ici :

http://aviationxchange.net/wikis/winforms/net-color-listbox.aspx (fin du document).

En espérant que cela puisse aider.

-1voto

damien Points 34

J'étais confronté au même problème mais je pense avoir trouvé la cause : j'utilise un outil qui permet de configurer les boutons de la souris (X-Mouse Button Control). En le désactivant, le problème a disparu comme par magie.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X