Получить Положение / Кнопка щелчка мышью на событии DoubleClick - PullRequest
6 голосов
/ 27 марта 2009

Есть ли способ получения (x, y) координат курсора мыши в событии DoubleClick для элементов управления?

Насколько я могу судить, позиция должна быть получена из глобального:

Windows.Forms.Cursor.Position.X, Windows.Forms.Cursor.Position.Y

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

Ответы [ 3 ]

14 голосов
/ 04 августа 2010

Используйте событие MouseDoubleClick вместо события DoubleClick. MouseDoubleClick предоставляет MouseEventArgs, а не обычные EventArgs. Это относится и к MouseClick, а не к Click, а также ко всем другим событиям, связанным с мышью.

MouseDoubleClick гарантирует, что мышь действительно есть. DoubleClick может быть вызвано чем-то другим, а координаты мыши могут быть бесполезны - MSDN: «События DoubleClick - это логически события более высокого уровня элемента управления. Они могут быть вызваны другими действиями пользователя, такими как комбинации клавиш быстрого доступа».

10 голосов
/ 27 марта 2009

Примечание: как указывал Данбрук, это не сработает в UserControl, потому что e не является MouseEventArgs. Также обратите внимание, что не все элементы управления будут даже давать вам событие DoubleClick - например, кнопка просто отправит вам два события Click.

  private void Form1_DoubleClick(object sender, EventArgs e)
   {
       MouseEventArgs me = e as MouseEventArgs;

       MouseButtons buttonPushed = me.Button;
       int xPos = me.X;
       int yPos = me.Y;
   }

Получает x, y относительно формы.

Также имеет левую или правую кнопку в MouseEventArgs.

6 голосов
/ 27 марта 2009

Control.MousePosition и Control.MouseButtons - это то, что вы ищете. Используйте Control.PointToClient () и Control.PointToScreen () для преобразования относительных координат экрана и элемента управления.

См. MSDN Свойство Control.MouseButtons , Свойство Control.MousePosition , Метод Control.PointToClient и Метод Control.PointToScreen для подробности.


UPDATE

Не видеть дрова для деревьев ...: D См. ответ Moose и посмотрите на аргументы события.

В этой статье MSDN перечислены действия мыши, которые вызывают события в зависимости от элемента управления.

UPDATE

Я пропустил актерский состав Муз, поэтому это не сработает. Вы должны использовать статические свойства Control внутри Control.DoubleClick (). Поскольку информация о кнопке закодирована в виде битового поля, вам необходимо выполнить следующую проверку с использованием нужной кнопки.

(Control.MouseButtons & MouseButtons.Left) == MouseButtons.Left
...