Двойной клик против одиночного клика - это взаимоисключающие - PullRequest
6 голосов
/ 09 июня 2009

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

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

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

Если у кого-то есть пример того, что кто-то разумно делает это, это будет оценено?

Ответы [ 8 ]

17 голосов
/ 09 июня 2009

С точки зрения обмена сообщениями в Windows, двойной щелчок всегда сначала генерирует сообщение в один клик; Windows не может заранее предсказать, что еще один щелчок придет вовремя, чтобы превратить его в двойной щелчок. Я не могу себе представить, что WPF собирается скрыть этот физический факт от вас.

10 голосов
/ 09 июня 2009

В ответ на прямой вопрос: двойной щелчок против одного щелчка - это взаимоисключающие? Ответ - нет, они не являются взаимоисключающими из-за способа, которым Windows должна интерпретировать ваше поведение с помощью мыши.

Однако, в ответ на более расплывчатый вопрос, касающийся прецедента, когда двойной щелчок не включает в себя поведение одиночного щелчка [т.е. Эти два события демонстрируют взаимоисключающее поведение], в Windows есть некоторые специфические события, которые демонстрируют поведение, о котором вы спрашиваете.

Например - апплеты панели задач:

  • Один клик обычно открывает контекстное меню для этого элемента.
  • Двойной щелчок обычно открывает меню свойств для приложения, с которым связан этот элемент панели задач, без открытия контекстного меню.

Часы панели задач:

  • Один клик ничего не делает.
  • Двойной щелчок открывает свойства даты и времени.

Однако вы можете заметить, что для ответа на ваш запрос требуется некоторое время, и, как другие отметили, что пауза - это Windows, ожидающая подтверждения двойного щелчка. Если вы не сделаете двойной щелчок, тогда будет активировано поведение Click. Если вы сделаете двойной щелчок, тогда будет запущено поведение DoubleClick. В этих конкретных ситуациях было сочтено целесообразным вести себя взаимоисключающим образом, и могут быть некоторые другие.

Я думаю, что это действительно зависит от ситуации относительно того, является ли другое поведение "правильным" или "неправильным" - я не думаю, что вы можете однозначно сказать, что одно правильно, а другое неправильно в всех ситуации. Если поведение, которое вы хотите продемонстрировать, имеет логический смысл с точки зрения пользователя [не с точки зрения вашего собственного программиста], то обязательно сделайте такое поведение взаимоисключающим; однако, если это не имеет смысла для пользователя, избегайте этого.

1 голос
/ 09 июня 2009

Обычно плохой шаблон - заставить двойной клик делать что-то, не связанное с поведением одного клика. Чтобы различать один щелчок и двойной щелчок, нужно подождать некоторое время, чтобы увидеть, поступит ли второй щелчок. Это может вызвать запутывающую задержку, когда вы просто что-то нажимаете.

У Рэймонда Чена есть хорошее сообщение в блоге по этому вопросу, включая описание того, как это сделать.

Но я бы сначала оттолкнул дизайнера.

1 голос
/ 09 июня 2009

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

1 голос
/ 09 июня 2009

Самым очевидным может показаться Finder / Explorer, где один щелчок файла выбирает его, а двойной щелчок открывает его. Существует множество прецедентов для такого рода вещей, и люди хорошо обучены его включением в уровень ОС, чтобы ожидать, что двойной щелчок сделает разные вещи.

  • Выбор текста (почти в каждом существующем приложении) - один щелчок для размещения курсора, двойной щелчок для выбора слова, тройной щелчок для выделения всей строки.
  • Explorer / Finder - один щелчок, чтобы выбрать файл, двойной щелчок, чтобы открыть его.
  • Outlook - один щелчок для предварительного просмотра электронной почты, двойной щелчок для открытия в новом окне.
0 голосов
/ 12 апреля 2011
private void OnItemMouseDown(object sender, MouseButtonEventArgs e) {
    if(e.ClickCount==2) {
        // DoubleClick Function
    }

    if(e.ClickCount==1) {
        // Click Function
    }
}
0 голосов
/ 26 октября 2009

Подводя итог сказанному здесь другими, двойной щелчок не отменяет ни одного щелчка.

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

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

0 голосов
/ 09 июня 2009

Microsoft Excel. Наведите указатель мыши на невыбранную ячейку.

Один клик = выбор ячейки

Двойной щелчок = войти в режим редактирования для этой ячейки

...