Двойной клик против одиночного клика - это взаимоисключающие
Может ли кто-нибудь назвать экземпляр приложения, в котором нажатие на сущность (скажем, изображение) делает одно, а если дважды щелкнуть по нему, оно делает что-то другое?
Единственный пример, который мне удалось найти, - это двойной щелчок по треку в 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
}
}