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

Soyez le premier à donner votre avis sur cette source.

Vue 13 055 fois - Téléchargée 761 fois

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

Ajouter un commentaire

Commentaire

Messages postés
100
Date d'inscription
jeudi 3 mars 2005
Statut
Membre
Dernière intervention
24 mai 2013

Salut
peut faire la même chose avec le click gauche
en fait je voudrai pour inhibe le click qui permet de selectionner des items
cordialement

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.