La ListView ne semble pas prendre en charge l'événement Scroll. J'ai besoin d'appeler une fonction chaque fois que la liste est défilée; Comment pourrais-je m'y prendre?Comment écouter le défilement dans un ListView?
Répondre
Pourquoi avez-vous besoin d'appeler une fonction lorsque la liste défile?
Si vous modifiez les éléments comme il est défilé, je vous recommande de définir la listview à virtuel.
Ou vous pouvez remplacer le listview et faire:
public class TestListView : System.Windows.Forms.ListView
{
private const int WM_HSCROLL = 0x114;
private const int WM_VSCROLL = 0x115;
public event EventHandler Scroll;
protected void OnScroll()
{
if (this.Scroll != null)
this.Scroll(this, EventArgs.Empty);
}
protected override void WndProc(ref System.Windows.Forms.Message m)
{
base.WndProc(ref m);
if (m.Msg == WM_HSCROLL || m.Msg == WM_VSCROLL)
this.OnScroll();
}
}
est ici une solution qui respecte chacun des modes d'affichage de ListView
:
Nous comptons sur le fait que la ListView
défile, changer la position des éléments. Si nous vérifions une modification de la propriété Bounds
de la première propriété de ListViewItem
, nous pouvons savoir si un mouvement s'est produit.
Vous aurez besoin d'ajouter un contrôle Timer
à la même forme votre ListView
est activé, et sa propriété Enabled
-True
(cela signifie qu'il se déclenche régulièrement sans avoir à être Start
ed). Ajoutez également une variable privée à votre classe de formulaire pour enregistrer le Bounds
du premier élément.
private Rectangle _firstItemBounds = null;
Lorsque vous remplissez votre ListView
, définissez cette variable Bounds
de premier élément. Par exemple:
private void Form1_Load(object sender, EventArgs e)
{
for (int i = 0; i < 1000; i++)
{
listView1.Items.Add(new ListViewItem("Item " + i));
}
_firstItemBounds = listView1.Items[0].Bounds;
}
Puis ajouter un gestionnaire pour l'événement de Tick
Timer
:
private void timer1_Tick(object sender, EventArgs e)
{
if (listView1.Items[0] == null)
{
return;
}
Rectangle bounds = listView1.Items[0].Bounds;
if (bounds != _firstItemBounds)
{
_firstItemBounds = bounds;
// Any scroll logic here
// ...
}
}
La valeur par défaut Timer Interval
de 100ms semble fonctionner très bien pour moi, mais vous devrez peut-être modifier ce en fonction ton application.
J'espère que cela aide.
il semble que la meilleure approche est la solution du brian. Cependant, il ne répond qu'aux événements générés par les barres de défilement, mais non aux événements du midbutton de la souris.
si vous changez le conditionnel:
if (m.Msg == WM_HSCROLL || m.Msg == WM_VSCROLL)
this.OnScroll();
par:
if (m.Msg == 0x000c2c9)
this.OnScroll();
maintenant respods à tous les événements de défilement dans listview.
- 1. comment supprimer la barre de défilement horizontale dans listview dans le cadre compact .net
- 2. Comment obtenir la hauteur de la barre de défilement horizontale dans un ListView
- 3. Avec WPF, le défilement vers le bas d'un ListView est rapide, le défilement vers le haut est lent
- 4. Comment trouver un ListView dans un DataTemplate?
- 5. Comment écouter une combinaison de touches dans le monde entier?
- 6. Comment écouter l'événement 'SendMail' dans Thunderbird?
- 7. WPF: Comment autoriser le défilement avec la roulette de la souris dans un ListView tout en faisant glisser des éléments ListView?
- 8. Comment résoudre le défilement lent dans UITableView
- 9. Comment faire un défilement dans jQuery?
- 10. C#/WPF: Imprimer un ListView
- 11. Paging dans le contrôle listview
- 12. Défilement dans un contrôle gridview
- 13. images multiples dans un listView
- 14. Asp.net - Comment introduire le défilement dans le contrôle gridview
- 15. Comment déterminer quand le défilement dans le navigateur apparaît
- 16. arrêt .Net écouter prise
- 17. Télécharger un fichier dans un listview imbriqué dans un UpdatePanel?
- 18. Création de catégories dans un ListView?
- 19. Comment redimensionner correctement la barre de défilement lorsque la collection sous-jacente d'un WPF ListView change?
- 20. limite le nombre de résultats dans un ASP.NET Nested ListView
- 21. Comment définir les modèles listview dans le code
- 22. Comment activer le défilement automatique sur GtkSourceView2?
- 23. Écouter l'enfant MenuItem Cliquez sur
- 24. Le serveur NIO ne peut pas écouter le client
- 25. Comment animer un point de défilement?
- 26. Affichage des totaux dans le ListView LayoutTemplate
- 27. Case à cocher dans le contrôle listview
- 28. Comment accéder aux contrôles dans le layouttemplate de listview?
- 29. Comment gérer l'événement onclick dans un bouton listview?
- 30. Comment regrouper des éléments dans un WPF ListView