Способ отличить Click от DoubleClick - PullRequest
1 голос
/ 07 августа 2010

На панели есть чертеж GDI с некоторыми объектами.

Когда пользователь нажимает на один объект, этот объект должен быть выбран, если дважды щелкнуть по нему, должно открыться новое всплывающее окно (свойства).

Теперь я переопределил
OnMouseClick => obj.Selected = Not obj.Selected
OnMouseDoubleClick => (New Properties(obj)).ShowDialog()

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

(Скажем, в реальном проекте я не использую щелчок, но даже MouseDown, однако, вопрос остается прежним)

Ответы [ 3 ]

2 голосов
/ 11 октября 2010

Как насчет использования свойства Clicks для MouseEventArgs ?

1 голос
/ 07 августа 2010

Как насчет того, чтобы оставить обработчик событий MouseClick как есть и просто добавить еще один obj.Selected = Not obj.Selected в обработчик событий DoubleClick?Это, конечно, приводит к выбранной последовательности отмены выбора (или наоборот) для двойного щелчка, и я не знаю, будет ли мигание распознаваться пользователем, но я думаю, что стоит попробовать, и это намного проще без таймера.

edit: Это довольно прагматичное решение не работает, если к событию SelectionChanged целевого объекта присоединен какой-либо обработчик события, потому что он будет срабатывать дважды, тогда как вообще не должен срабатывать.

1 голос
/ 07 августа 2010

Когда вы получаете событие щелчка, вы можете (используя таймер или любой другой механизм задержки) задержать действие выбора немного дольше, чем указано в SystemInformation.DoubleClickTime.Если другое событие MouseDown происходит в течение этого периода времени, это двойной щелчок, поэтому вы должны отменить действие выбора в очереди.

...