Winforms: ¿Cómo puedo mostrar programáticamente el último elemento en una vista de lista de C # cuando hay barras de desplazamiento verticales?
Pregunta
¿Cómo puedo mostrar programáticamente el último elemento en una vista de lista de C # cuando hay barras de desplazamiento verticales? He estudiado todos los métodos asociados con las vistas de lista y no puedo encontrar nada.
Solución
En realidad no es fácil / posible desplazarse por la vista de lista. Debe indicar al elemento para asegurarse de que esté visible.
var items = listView.Items;
var last = items[items.Count-1];
last.EnsureVisible();
Otros consejos
this.listView1.Items[this.listView1.Items.Count - 1].EnsureVisible();
ListViewItem.EnsureVisible ()
WINFORMS:
¿Intentaste establecer el valor Seleccionado en VERDADERO en el último elemento de la colección de elementos de ListView?
Creo que hacer esto se centrará en el último elemento ... desplazarse hacia abajo si es necesario. Pero no lo intenté yo mismo.
EDITAR: Esto hará el truco:
Me.ListView1.Items(Me.ListView1.Items.Count - 1).EnsureVisible()
¿WPF o WinForms?
En WPF, obtienes el ListViewItem
y llamas a BringIntoView
.
Este es un enlace para usar una función de Windows para ocultar la horizontal y forzar la vertical para que se muestre en todo momento:
http: //social.msdn.microsoft.com/Forums/en-US/winforms/thread/4aa4dade-53a2-4e2e-a8b4-b4980da1f39c/
El siguiente truco seleccionará y mostrará el último elemento de ListView.
No estoy seguro de por qué esto funciona, pero funciona.
listview.SelectedIndices.Clear();
listview.FocusedItem = listview.Items[listview.Items.Count - 1];
listview.FocusedItem.Selected = true;
listview.BeginInvoke((MethodInvoker)delegate {
listview.FocusedItem.EnsureVisible();
});
Además, si no desea que se muestre una barra de desplazamiento horizontal, debe cambiar el tamaño de las columnas de ListView para que se ajusten al ancho ClientArea
de ListView antes de llamar a BeginInvoke
.