Interception du click droit sur listview (différencier le click sur l'entête colonne, l'item et les subitems)

Description

Ce code permet d'intercepter le click droit sur les différentes parties d'un listview

(Réponse à un message du forum)

Source / Exemple :


private void SubClasserCallBack(object sender,CallBackArgs Args)
        {
            //System.Diagnostics.Debug.Print(Args.m.Msg.ToString());
            //Console.WriteLine(Args.m.HWnd.ToString());
            const int WM_CONTEXTMENU = 0x7B;

            switch (Args.m.Msg)
            {
                case WM_CONTEXTMENU: //interception du click droit
                    HD_HITTESTINFO HTI = new HD_HITTESTINFO() ;

                    const int LVM_FIRST = 0x1000;
                    const int LVM_GETHEADER = (LVM_FIRST + 31);

                    const int HDM_FIRST = 0x1200;
                    const int HDM_HITTEST = (HDM_FIRST + 6);

                    const int HHT_ONHEADER = 0x2;
                    const int HHT_ONDIVIDER = 0x4;

                    int hHeader = 0;

                    if (listView1.View == View.Details)
                    {
                        hHeader = SendMessage(listView1.Handle, LVM_GETHEADER, 0, IntPtr.Zero);
                    }

                    if (hHeader > 0)
                    {
                        HTI.flags = HHT_ONHEADER | HHT_ONDIVIDER;
                        HTI.pt.X = listView1.PointToClient(System.Windows.Forms.Cursor.Position).X;
                        HTI.pt.Y = listView1.PointToClient(System.Windows.Forms.Cursor.Position).Y;

                        SendMessage(hHeader, HDM_HITTEST, 0,ref HTI);
                    }

                    //localisation du click
                    if ((hHeader>0) && (HTI.iItem > -1))
                    {
                        //click sur header
                        MessageBox.Show("Header");
                    }
                    else if (listView1.SelectedItems.Count == 0)
                    {
                        //click sur un subitem
                        MessageBox.Show("subitem");
                    }
                    else if (listView1.SelectedItems.Count >= 1)
                    {
                        //click sur un item
                        MessageBox.Show("item");
                    
                    }
                    break; 
            }
        }

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.