Двойной клик против одиночного клика - это взаимоисключающие

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

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

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

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

8 ответов

Решение

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

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

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

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

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

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

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

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

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

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

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

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

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

  • Выделение текста (почти в каждом существующем приложении) - один щелчок для размещения курсора, двойной щелчок для выбора слова, тройной щелчок для выделения всей строки.
  • Explorer / Finder - один щелчок, чтобы выбрать файл, двойной щелчок, чтобы открыть его.
  • Outlook - один щелчок для предварительного просмотра электронной почты, двойной щелчок для открытия в новом окне.

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

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

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

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

Майкрософт Эксель. Наведите указатель мыши на невыбранную ячейку.

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

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

private void OnItemMouseDown(object sender, MouseButtonEventArgs e) {
    if(e.ClickCount==2) {
        // DoubleClick Function
    }

    if(e.ClickCount==1) {
        // Click Function
    }
}
Другие вопросы по тегам