Come simulare l'evento column click

mercoledì 05 giugno 2013 - 13.09

idol8 Profilo | Newbie

buon giorno a tutti, ho cercato nel forum fra le varie discussioni, ma non ho trovato nulla che si avvicinasse al mio problema.

Lavoro su piattaforma visual studio 2010, in una finestra ho una Listview, chiamiamola lst.

Ormai in automatico copio ed incollo questi metodi che fan si, cliccando sull'header della colonna prescelta, mi ordinano la lista.

Class ListViewItemComparer

Implements IComparer
Private col As Integer

Public Sub New()
col = 0
End Sub

Public Sub New(ByVal column As Integer)
col = column
End Sub

Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer _
Implements IComparer.Compare
Return [String].Compare(CType(x, ListViewItem).SubItems(col).Text, CType(y, ListViewItem).SubItems(col).Text)
End Function

End Class

Private Sub lst_ColumnClick(ByVal sender As Object, ByVal e As System.Windows.Forms.ColumnClickEventArgs) Handles lst.ColumnClick
Dim list As New ListView
list = sender
list.ListViewItemSorter = New ListViewItemComparer(e.Column)
list.Sort()
End Sub

Il mio problema è che voglio che sia un tasto a richiamare il metodo (lst.columnclick)
che mi ordini la lista, ma sbaglio qualcosa negli argomenti da inserire, cioè:

Private Sub btnord_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnord.Click
lst.columnclick( . . . , . . . )
End Sub

le ho provate tutte, ma non capisco. C'è qualcuno che mi può aiutare?
Grazie a tutti anticipatamente

Dev01 Profilo | Newbie

lst.ColumnClick(Nothing,Nothing)

è una tecnica che ho scoperto per caso facendo delle prove disperate per risolvere il tuo stesso problema.

01000100 01100101 01110110 00101101 00110000 00110001

Vinsent Profilo | Senior Member

>lst.ColumnClick(Nothing,Nothing)
>
>è una tecnica che ho scoperto per caso facendo delle prove disperate
>per risolvere il tuo stesso problema.
>
>01000100 01100101 01110110 00101101 00110000 00110001

Anch' io ho trovato utile questa soluzione ma nel caso specifico non credo sia corretta.
La sub usa i parametri, se li passi come Nothing manca delle informazioni necessarie e genera un' eccezione.
Quindi, se con il button.click si richiama la Sub bisogna passargli i parametri corretti altrimenti basta fare riferimento direttamente al controllo con le sue proprietà e metodi.
Ciao


idol8 Profilo | Newbie

ragazzi grazie ma ho già risolto così

private sub btn(byval sender as system.object, byval e as system.eventargs) handless btn.click
lst.listviewitemsorter = new listviewitemcomparer(2)
lst.sort
end sub

Vinsent Profilo | Senior Member

>ragazzi grazie ma ho già risolto così
>
>private sub btn(byval sender as system.object, byval e as system.eventargs)
>handless btn.click
>lst.listviewitemsorter = new listviewitemcomparer(2)
> lst.sort
>end sub

Bene!
Da autodidatta con i parametri ho litigato per un bel pò prima di capirci qualcosa....
Piccolo nota....ho provato il tuo codice e VS ritorna un' avviso di conversione implicita in "list = sender" qui:
Private Sub lst_ColumnClick(ByVal sender As Object, ByVal e As System.Windows.Forms.ColumnClickEventArgs) Handles lst.ColumnClick
Dim list As New ListView
list = sender
list.ListViewItemSorter = New ListViewItemComparer(e.Column)
list.Sort()
End Sub
Se apri la scheda del progetto e vai in "compilazione" ci sono tre avvisi su "nessuno", io ho preso l' abitudine di impostarli su "Avviso" in modo da evitare delle sorprese...dovresti fare una conversione tra "oggetti" o dichiarare "sender" come "ListView", in questo modo eviti l' avviso e sender eredita proprietà e metodi della ListView, quindi potresti scrivere la Sub così:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Per il discorso del Button che richiama la tua Sub, come ti dicevo, devi passare parametri compatibili a quelli dichiarati, un' oggetto(sender) che è la listview e ColumnClickEventArgs che restituisce l' indice della colonna cliccata cioè un "numero"....credo di aver spiegato malissimo il concetto...comunque, per richiamare la Sub lst_ColumnClick al click del button puoi scrivere:
lst_ColumnClick(lst, New ColumnClickEventArgs(1))
dove "1" è l' indice della colonna, occhio che l' indice parte da zero.
Vedi tu se può servirti questa "spiegazione".......
Ciao!


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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5