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 :
- 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).
- Sélectionnez un élément dans la liste et rappelez-vous de ce que vous avez sélectionné.
- 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.
- 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());
}
}