Come ottenere l'index dell'ultimo elemento visualizzato di una ListVie...

venerdì 29 aprile 2005 - 15.10

gianp Profilo | Junior Member

Ciao a tutti.
Il mio scopo è sincronizzare lo scrolling di 2 ListView per farlo ho bisogno di ottenere l'index dell'ultimo dei ListViewItem visualizzato (non l'ultimo in assoluto ma l'ultimo a video).
La necessita di tale index consiste passare tale index alla EnsureVisible dopo aver catturato l'evento di scroll.

Per ottenere l'index del primo elemento (visibile a video) di una ListView si usa ListViewName.TopItem
Non esiste il corripondente per ottenere l'index dell'ultimo dei ListViewItem visualizzati.
Qualcuno saprebbe indicarmi un meccanismo efficace?
Grazie a tutti.

Andy Profilo | Senior Member

Ciao..se le dimensioni della tua lista non cambiano, e in fase di progettazione riesci a vedere quanti elementi visualizza la tua lista, l'ultimo sarà:

ListViewName.TopItem+Numero_elementi_visibili

..non è il massimo ma in mancanza di meglio..

gianp Profilo | Junior Member

Ciao.
Ho già adottato questa soluzione facendo in modo che il controllo non si possa ridimensionare in nessun modo; ma questa è solo una pezza, infatti vorrei che il ridimensionamento fasse possibile e per farlo ho bisogno di sapere qual'è l'ultimo elemento visibile della ListView.
Grazie comunque per il suggerimento.

martinmystero Profilo | Newbie

Ciao,
allora da quello che ho capito, tu hai bisogno di sapere qual'è l'ultimo valore (index) visualizzato su una listview ancorata (ridimensionabile). Puoi usare un piccolo stratagemma che ti permette di sapere (calcolare) il numero esatto di elementi visibili su una listview.
Questo calcolo si basa su una listview standard senza modificare nessun parametro relativo alle caratteristiche del testo, in caso contrario dovrai fare le modifiche del caso.

ListView1.Height = 22 + (14 * NumElemIniziali)

Il valore 22 è l'altezza dell'intestazione delle colonne, 14 è l'altezza di ogni singola riga. Quindi se vuoi inizialmente che ci siano 10 elementi impostati fai:

ListView1.Height = 22 + (14 * 10)

Per recuperare invece il numero di elementi presenti in caso di 'espansione' della listview basta che richiami la funzione

Public Function GetLastItem() As Integer
Dim x As Integer = ListView1.Height
Return ((x - 22) / 14)
End Function

Spero di aver capito bene la tua richiesta... in caso fammi sapere...
ciao
;)

gianp Profilo | Junior Member

Ok così mi funziona.
Grazie 1000
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5