Реализация отсутствующего MouseDoubleClick с помощью события управления MouseClick Winforms - PullRequest
2 голосов
/ 13 октября 2011

У меня есть элемент управления, в котором реализован прослушиватель событий MouseClick, в то время как прослушиватель MouseDoubleClick отсутствует.

Мне уже удалось различить события click и dblclick в javascript, используя мою собственную версию плагина jQuery.DoubleTap:bit.ly/roCV7h

Поэтому я хотел бы использовать подобный прием в C #: установить задержку при выполнении события click и отменить ее, если произойдет повторный запуск до истечения времени ожидания.

Iнашел много решений для stackoverflow: но все они не поточнобезопасны и не переводят основной поток (GUI) в спящий режим.

1 Ответ

0 голосов
/ 13 октября 2011

Я бы использовал таймер и сохранил количество кликов. Когда таймер «тикает», проверьте счетчик кликов и запустите соответствующее событие.

псевдокод (извините, не вызывайте функции таймера верхней части головы) ...

Timer timer = new Timer(); //maybe 500 ms elapsed period
int mouseCount = 0;

void OnMouseClick()
{
   if(!timer.Enabled)
      //start timer
   mouseCount++;
}

void OnTimerTick()
{
   timer.Stop();
   if(mouseCount == 1)
      //fire single mouse click event
   else if(mouseCount > 1)
      //fire double mouse click event
   mouseCount = 0;
}
...