WinForms отключает двойные щелчки и принимает все щелчки мыши?

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


person Will    schedule 19.12.2011    source источник
comment
Вместо этого используйте событие mousedown.   -  person Russell Troywest    schedule 19.12.2011
comment
@RussellTroywest Я думаю, что MouseClick было бы лучше. Из-за повышения порядка.   -  person Michał Powaga    schedule 19.12.2011
comment
@Michael: Согласно MSDN, два одиночных щелчка, которые происходят достаточно близко по времени, что определяется настройками мыши в операционной системе пользователя, будут генерировать событие MouseDoubleClick вместо второго события MouseClick. - Это то, что видит Хай.   -  person Russell Troywest    schedule 19.12.2011
comment
Да, есть способы отключить события двойного щелчка, но вам нужно задокументировать конкретный элемент управления, который вы используете.   -  person Hans Passant    schedule 19.12.2011


Ответы (3)


Не совсем уверен, почему этот вопрос получил награду, принятый ответ должен быть уже довольно близок к решению. За исключением того, что вы должны использовать MouseUp вместо MouseDown, ваш пользователь обычно ожидает, что действие щелчка вступит в силу, когда он отпустит кнопку. Что обеспечивает возможность возврата «упс, не хотел нажимать на нее, переместите мышь, чтобы она была проигнорирована».

Тем не менее, для встроенных элементов управления Winforms, таких как PictureBox, это можно настроить с помощью метода Control.SetStyle(). Добавьте новый класс в свой проект и вставьте код, показанный ниже. Скомпилировать. Удалите новый элемент управления из верхней части панели инструментов:

using System;
using System.Windows.Forms;

class MyPictureBox : PictureBox {
    public MyPictureBox() {
        this.SetStyle(ControlStyles.StandardDoubleClick, false);
    }
}

Однако имейте в виду, что это не будет работать для классов .NET, которые обертывают существующий собственный элемент управления Windows. Например, TextBox, ListBox, TreeView и т. д. Базовой конфигурацией для этого является Член WNDCLASSEX.style, флаг стиля CS_DBLCLKS. Код, устанавливающий этот флаг стиля, встроен в Windows и не может быть изменен. Вам понадобится другой вид операции, чтобы превратить двойной щелчок обратно в один щелчок. Вы можете сделать это, переопределив метод WndProc(), я приведу пример для TextBox:

using System;
using System.Windows.Forms;

class MyTextBox : TextBox {
    protected override void WndProc(ref Message m) {
        // Change WM_LBUTTONDBLCLK to WM_LBUTTONCLICK
        if (m.Msg == 0x203) m.Msg = 0x201;
        base.WndProc(ref m);
    }
}

Просто измените имя класса, если вы хотите сделать это для других элементов управления. Управление Winforms, чтобы заставить его работать так, как вы хотите, никогда не требует много кода, просто Петцольд :)

person Hans Passant    schedule 15.07.2013

Вы хотите использовать событие MouseDown элемента управления вместо события Click. MouseDown будет вызываться каждый раз, когда мышь «нажимается» на этот элемент управления. Click может не вызваться, если система считает, что это был двойной щелчок. Вместо этого будет вызвано событие DoubleClick.

person Russell Troywest    schedule 19.12.2011

Я думаю, вы хотите подсчитать все клики. Если вы хотите подсчитать клик, установите одну переменную счетчика и увеличьте ее в событии клика. Может быть это поможет вам ....

person Manoj Savalia    schedule 19.12.2011
comment
Сделайте это сами и нажмите очень быстро 10 раз. Вы получите число меньше 10. Мне нужны все 10 кликов. - person Will; 19.12.2011