Как реализовать двойной щелчок правой кнопкой мыши для winforms? - PullRequest
8 голосов
/ 08 сентября 2010

Этот вопрос , кажется, указывает на существование события windows для двойного щелчка правой кнопкой мыши. Как реализовать это в форме окна C #, однако, не совсем понятно.

Какой лучший способ реализовать двойной щелчок правой кнопкой мыши на элементе управления, например на кнопке?

(я думаю, что должен использовать MouseDown и следить за временем между щелчками. Есть ли лучший способ?)

Ответы [ 4 ]

5 голосов
/ 08 сентября 2010

Переопределите функцию WndProc и прослушайте WM_RBUTTONDBLCLK, что, как видно на этой странице pinvoke , равно 0x0206.

На этой странице pinvoke также есть пример кода на C #, как это сделать.

Всякий раз, когда вы видите что-то о сообщении Windows и / или Windows API и хотите использовать его в C #, сайт pinvoke - хорошее место, чтобы начать поиск.

3 голосов
/ 08 сентября 2010

Переопределить Control.WndProc и обработать сообщение WM_RBUTTONDBLCLK вручную.

2 голосов
/ 12 марта 2013

MouseEventArgs содержит свойство 'Button', которое указывает, какая кнопка была нажата. Так что вы можете просто проверить это:

    private void MouseDoubleClickEventHandler(object sender, MouseEventArgs e)
    {
        if (e.Button == MouseButtons.Left)
        {
            DoSomthing();
        } else if (e.Button == MouseButtons.Right)
        {
            DoSomethingElse();
        }
    }
0 голосов
/ 08 сентября 2010

Я смог реализовать это, унаследовав от кнопки и переопределив WndProc, как предложил ho1 и Рид.Вот унаследованная кнопка:

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);
    }
}

Я программно добавил кнопку в форму и подписался на ее новое событие DoubleRightClick.Я не уверен, как именно сгенерировать соответствующий MouseEventArgs, но так как это всего лишь тестовый пример, это не важно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...