Тройной щелчок мыши в C#?

на MS-Word события щелчка мыши используются как:

один клик - размещение Курсора
Двойной Щелчок-Выбирает Слово
Тройной Щелчок-Выбирает Пункт

В C# я могу обрабатывать события с одним и двойным щелчком мыши, но я хочу обрабатывать Triple Mouse Click событие C# Windows TextBox.

пример:

void textbox1_TripleClick()
{
    MessageBox.Show("Triple Clicked"); 
} 

4 ответов


взгляните на это: Mousebuttoneventargs.clickcount

Это должно покрыть его, я полагаю.


вам просто нужно сохранить время, когда в этом поле произошел двойной щелчок. Затем в обработчике для одного щелчка проверьте, произошел ли двойной щелчок не более N миллисекунд назад (N = 300 или около того).

в этом случае вызовите функцию TripleClick() напрямую или определите новое событие для производного "TripleClickAwareTextBox".


Я работал над аналогичной проблемой на C++

во-первых, вам нужно понять, как запускаются события, я возьму Клик с помощью левой кнопки мыши: - Нажмите один раз - > левая кнопка нажмите событие уволен - Двойной щелчок - > левый двойной щелчок событие уволен

Windows поддерживает вас только до этого уровня.

для тройного щелчка это, по сути, щелчок после двойного щелчка с достаточно небольшим промежутком времени. Итак, что вам нужно сделать, это обработать событие click, проверьте, был ли двойной щелчок до этого и запустите событие тройного щелчка.

хотя код отличается, вот как я это делаю:

  • объявить doubleClickTime & doubleClickInterval для хранения в последний раз мы дважды щелкните & время между щелчками.
  • объявить tripleClickEventFired, чтобы указать, что мы уже запустили событие (init в false)

обработчики

клик Обработчик

if ((clock() - doubleClickFiredTime) < doubleClickInterval)
    <fire triple click event>
    tripleClickFired = true;
else
    <fire click event>

двойной клик обработчик

doubleClickTime == clock()
doubleClickInterval == GetDoubleClickTime() * CLOCKS_PER_SEC / 1000;

If ( !tripleClickEventFired)
    <fire doubleClickEvent>
else
    tripleClickEventFired = false;

функции я:

  • clock (): получить текущее системное время в единице
  • GetDoubleClickTime (): функция, предоставляемая Windows, чтобы получить время между щелчками
  • часть "* CLOCKS_PER_SEC / 1000;" предназначена для скрытия возвращаемого значения GetDoubleClickTime () в единицу"'

Примечание: 3-й click запускает событие Click и Double Click на системном уровне


ЭТОГО:

    private int _clicks = 0;
    private System.Windows.Forms.Timer _timer = new System.Windows.Forms.Timer();
    private void txtTextMessage_MouseUp(object sender, MouseEventArgs e)
    {
        _timer.Stop();
        _clicks++;
        if (_clicks == 3)
        {
            // this means the trip click happened - do something
            txtTextMessage.SelectAll();
            _clicks = 0;
        }
        if (_clicks < 3)
        {
            _timer.Interval = 500;
            _timer.Start();
            _timer.Tick += (s, t) =>
            {
                _timer.Stop();
                _clicks = 0;
            };
        }
    }