Winforms: Comment puis-je afficher par programme le dernier élément d'une listview C # lorsqu'il existe des barres de défilement verticales?
Question
Comment puis-je afficher par programme le dernier élément dans une listview C # lorsqu'il existe des barres de défilement verticales? J'ai étudié toutes les méthodes associées aux listviews et je ne trouve rien.
La solution
Ce n’est pas vraiment facile / possible de faire défiler la liste. Vous devez indiquer l'élément pour vous assurer qu'il est visible.
var items = listView.Items;
var last = items[items.Count-1];
last.EnsureVisible();
Autres conseils
this.listView1.Items[this.listView1.Items.Count - 1].EnsureVisible();
ListViewItem.EnsureVisible ()
WINFORMS:
Avez-vous essayé de définir la valeur Selected sur TRUE dans le dernier élément de la collection Items de ListView?
Je pense que cela va se concentrer sur le dernier élément ... défiler vers le bas si cela est nécessaire. Mais je ne me suis pas essayé.
EDIT: Cela fera l'affaire:
Me.ListView1.Items(Me.ListView1.Items.Count - 1).EnsureVisible()
WPF ou WinForms?
Dans WPF, vous obtenez le ListViewItem
et appelez BringIntoView
dessus.
Il s'agit d'un lien permettant d'utiliser une fonction Windows pour masquer l'horizontale et forcer la verticale à s'afficher à tout moment:
http: //social.msdn.microsoft.com/Forums/en-US/winforms/thread/4aa4dade-53a2-4e2e-a8b4-b4980da1f39c/
Le hack suivant va à la fois sélectionner et afficher le dernier élément de ListView.
Vous ne savez pas pourquoi cela fonctionne, mais cela fonctionne.
listview.SelectedIndices.Clear();
listview.FocusedItem = listview.Items[listview.Items.Count - 1];
listview.FocusedItem.Selected = true;
listview.BeginInvoke((MethodInvoker)delegate {
listview.FocusedItem.EnsureVisible();
});
De même, si vous ne souhaitez pas afficher de barre de défilement horizontale, vous devez redimensionner les colonnes ListView afin de les adapter à la largeur ClientArea
du ListView avant d'appeler BeginInvoke
.