2009-03-27 3 views
6

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

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

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

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

ответ

5

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

См. MSDN Control.MouseButtons Property, Control.MousePosition Property, Control.PointToClient Method и Control.PointToScreen Method для деталей.


UPDATE

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

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

UPDATE

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

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

Как определить, какая кнопка нажата с помощью кнопок Control.MouseButtons? Он содержит константы для сравнения, но кроме этого я не вижу, как его использовать. Параметр doubleclick eventargs не содержит переменной для сравнения с этим. – user79755

+0

danbruc, спасибо за головы! Я отредактировал свой пост, чтобы отразить вашу информацию. – Moose

+0

Ваш ответ лучше: в Compact Framework нет события MouseDoubleClick, но ваш метод в порядке. – Soonts

9

Примечание: Как danbruc отметил, что это не будет работать на UserControl, потому что е не является 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; 
    } 

Возвращает х, у относительно формы ..

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

+0

Ох, да ... просто забыл про самую простую вещь ...: D –

+0

Оххх нет ... меня будет пустым, потому что аргументы события не MouseEventArgs, так что это не работает. –

+0

@ danbruc - Я просто попробовал, чтобы быть уверенным ... это работает для меня? Может быть, я просто правильно держу язык! – Moose

13

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

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

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