ListView ContextMenu

martedì 24 gennaio 2006 - 13.39

Ciciu Profilo | Senior Member

Ciao a tutti.

Ho un problema con il context menu dei controlli ListView.

Sono riuscito a far comparire menu diversi nel caso in cui l'Utente stia right-clicckando su un item o "sul vuoto" del controllo...

Ma come faccio ad intercettare il click sull'intestazione della colonna ?

Ciao - Fabio

Brainkiller Profilo | Guru

>Ciao a tutti.
>
>Ho un problema con il context menu dei controlli ListView.
>
>Sono riuscito a far comparire menu diversi nel caso in cui l'Utente
>
>Ma come faccio ad intercettare il click sull'intestazione della
> colonna ?

Così:

DataGrid.HitTestInfo info = dataGrid1.HitTest(e.X, e.Y);
if(info.Type == DataGrid.HitTestType.ColumnHeader)
{
Console.WriteLine("HEADER");
}

Ciao


David De Giacomi
Microsoft MVP
http://blogs.dotnethell.it/david/

Ciciu Profilo | Senior Member

Ciao.
Temo che non funzioni correttamente sul ListView...

Ho fatto una prova agganciandomi all'evento MouseUp del ListView, ma non mi sembra intercettare il right click sull'intestazione della colonna (mentre lo intercetta correttamente sull'item e/o sul "vuoto")...
In particolare non ho trovato nulla di somigliante al membro "Type" di datagrid...

private void lstPeople_MouseUp(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
ListViewHitTestInfo a = lstPeople.HitTest(e.X, e.Y);
MessageBox.Show(a.Location.ToString());
}
}

Ciao - Fabio

Fabio G

Brainkiller Profilo | Guru

Ciao,
scusa non so perchè ma mi sono sognato che si trattava di DataGrid anche se in realtà era una ListView :-O Ho dormito poco ..
Allora per farlo con la ListView la cosa è un po' più complicata, è necessario creare una classe derivata da ListView e fare un override di WndProc che è una funzione che smista i messaggi di Windows. A quel punto bisogna cercare i messaggi di tipo WM_NOTIFY e verificare se all'interno c'è:

NM_RCLICK

che scatta quando viene premuto un tasto destro del mouse su un controllo.
Se c'è verificare che la posizione sia quella dove appare l'Header, e a quel punto ci sei.

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/common/notifications/nm_rclick.asp

Non è una cosa banale da implementare.
ciao

David De Giacomi
Microsoft MVP
http://blogs.dotnethell.it/david/
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