WinForms: Como posso programaticamente exibir o último item em um C # listview quando há barras de rolagem verticais?

StackOverflow https://stackoverflow.com/questions/616491

Pergunta

Como posso programaticamente exibir o último item em um C # listview quando há barras de rolagem verticais? Estudei cada método associado de listas e não consigo encontrar nada.

Foi útil?

Solução

Na verdade não é fácil / possível rolar a exibição de lista. Você precisa dizer o item para ter certeza que é visível.

var items = listView.Items;
var last = items[items.Count-1];
last.EnsureVisible();

Outras dicas

this.listView1.Items[this.listView1.Items.Count - 1].EnsureVisible();  

ListViewItem.EnsureVisible ()

winForms:

Você tentou definir o valor selecionado para TRUE no último item na coleção de itens do ListView?

Eu acho que fazendo isso irá focar o último item ... rolagem para baixo se for necesary. Mas eu did't eu tentei.

EDIT: Isto irá fazer o truque:

Me.ListView1.Items(Me.ListView1.Items.Count - 1).EnsureVisible()

WPF ou WinForms?

Em WPF, você começa a ListViewItem e chamada BringIntoView nele.

Este é um link para usando um Windows funcionar para esconder a horizontal e força vertical para ser mostrado em todos os momentos:

http: //social.msdn.microsoft.com/Forums/en-US/winforms/thread/4aa4dade-53a2-4e2e-a8b4-b4980da1f39c/

O seguinte truque irá tanto selecionar e mostrar o último item ListView.
Não tenho certeza por que isso funciona, mas funciona.

listview.SelectedIndices.Clear();  
listview.FocusedItem = listview.Items[listview.Items.Count - 1];  
listview.FocusedItem.Selected = true;  
listview.BeginInvoke((MethodInvoker)delegate { 
    listview.FocusedItem.EnsureVisible(); 
});

Além disso, se você não quer uma barra de rolagem horizontal para mostrar, você precisa redimensionar colunas de ListView para ajustar a largura ClientArea do ListView antes de chamar BeginInvoke.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top