2011-12-19 3 views
6

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

+2

Вместо этого используйте событие mousedown. –

+0

@ RussellTroywest Я думаю, что событие [MouseClick] (http://msdn.microsoft.com/en-us/library/system.windows.forms.control.mouseclick%28VS.80%29.aspx) было бы лучше. Из-за наведения порядка. –

+1

@ Майкл: Согласно MSDN «Два отдельных клика, которые достаточно близки по времени, как определено настройками мыши операционной системы пользователя, будут генерировать событие MouseDoubleClick вместо второго события MouseClick». - Это то, что видит Высокий. –

ответ

9

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

Тем не менее, для встроенных элементов управления 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 member, флаг стиля 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); 
    } 
} 

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

-2

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

+0

Сделай это сам и быстро нажмите его очень быстро 10 раз. Вы получите число меньше 10. Я хочу, чтобы все 10 кликов. – Will

2

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

Смежные вопросы