8 votes

Comment mettre en place un double-clic droit pour les winforms ?

Cette question semble indiquer l'existence d'un événement Windows pour un double-clic droit. La manière de l'implémenter dans un formulaire Windows C# n'est cependant pas très claire.

Quelle est la meilleure façon de mettre en œuvre le double-clic droit sur un contrôle tel qu'un bouton ?

(Je pense que je dois utiliser MouseDown et de suivre le temps qui s'écoule entre deux clics. Existe-t-il un meilleur moyen ?)

5voto

ho1 Points 31752

Remplacer le WndProc et d'écouter la fonction WM_RBUTTONDBLCLK qui, comme on peut le voir sur cette épingler La page est 0x0206 .

Cette page pinvoke contient également un exemple de code C# qui explique comment procéder.

Chaque fois que vous voyez quelque chose à propos d'un message Windows et/ou d'une API Windows et que vous voulez l'utiliser en C#, le site pinvoke est un bon endroit où commencer à chercher.

3voto

Reed Copsey Points 315315

Annulation Control.WndProc et de gérer les WM_RBUTTONDBLCLK manuellement.

2voto

IamMan Points 312

Les MouseEventArgs contiennent la propriété "Button" qui indique quel bouton a été cliqué. Vous pouvez donc simplement vérifier cette propriété :

    private void MouseDoubleClickEventHandler(object sender, MouseEventArgs e)
    {
        if (e.Button == MouseButtons.Left)
        {
            DoSomthing();
        } else if (e.Button == MouseButtons.Right)
        {
            DoSomethingElse();
        }
    }

0voto

JYelton Points 14014

J'ai pu mettre cela en œuvre en héritant d'un bouton et en surchargeant la fonction WndProc comme l'ont suggéré Ho1 et Reed. Voici le bouton hérité :

public class RButton : Button
{
    public delegate void MouseDoubleRightClick(object sender, MouseEventArgs e);
    public event MouseDoubleRightClick DoubleRightClick;
    protected override void WndProc(ref Message m)
    {
        const Int32 WM_RBUTTONDBLCLK = 0x0206;
        if (m.Msg == WM_RBUTTONDBLCLK)
            DoubleRightClick(this, null);
        base.WndProc(ref m);
    }
}

J'ai ajouté le bouton par programme au formulaire et je me suis abonné à son nouvel événement DoubleRightClick. Je ne sais pas exactement comment générer l'événement MouseEventArgs mais comme il ne s'agit que d'un cas de test, ce n'est pas important.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X