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

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

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

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

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

Ответы на вопрос(8)

двойной щелчок не отменяет ни одного щелчка.

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

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

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

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

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

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

    if(e.ClickCount==1) {
        // Click Function
    }
}
Решение Вопроса

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

 Duncan Edwards09 июн. 2009 г., 18:00
Это именно та ясность, которую я ищу. Приветствия.
 i_am_jorf09 июн. 2009 г., 18:41
Вы просили примеры приложений, но на самом деле искали кого-то, кто мог бы рассказать вам, как работают события в Windows? Brilliant.
 Duncan Edwards09 июн. 2009 г., 19:10
Не пойми меня неправильно. Примеры Балабастера тоже были чрезвычайно полезны.
 BenAlabaster09 июн. 2009 г., 19:34
@jeffamaphone StackOverflow полон этого - иногда вам приходится читать между строк, чтобы выяснить, что хочет пользователь. Выимеют письменные спецификации дизайна, верно? :П

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

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

 John Rudy09 июн. 2009 г., 18:14
Ах, но вход в режим редактирования неявно выбирает ячейку. :)
 micahtan09 июн. 2009 г., 18:23
Верно - он выбирает ячейку. Но попробуйте перейти в режим редактирования с помощью одного клика. Ты не можешь Семантика редактирования также различна между ними. Если ячейка выбрана (но не в режиме редактирования), содержимое ячеек заменяется при наборе. Если ячейка находится в режиме редактирования, набранные символы вставляются в каратах. Не совсем поведение надмножества / подмножества, но хороший момент.

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

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

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

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

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

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

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

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

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

 John Rudy09 июн. 2009 г., 18:09
В области системных уведомлений (также называемой «Лоток») перед обработкой одного щелчка реализована задержка, которая по умолчанию составляет примерно 500 мс, но может изменяться в зависимости от задержки двойного щелчка. Вот как этот, очень специфический раздел пользовательского интерфейса Windows выполняет эту опцию. В нормальных условиях это плохой дизайн пользовательского интерфейса и нарушает соглашения Windows, но в данном конкретном случае это преднамеренно. (Примерно на полпути вниз в этой записи блога:blogs.msdn.com/oldnewthing/archive/2009/04/30/9577283.aspx)
 Mark Ransom09 июн. 2009 г., 18:06
Я заметил, что когда вы щелкаете один раз по значку на панели задач, меню появляется некоторое время. Интересно, есть ли в обработчике одного клика специальный код для ожидания возможности двойного щелчка?
 BenAlabaster09 июн. 2009 г., 18:10
Возможно, это так, я не могу говорить об этом, поскольку у меня нет хорошо изученного ответа. Поведение на самом деле может быть подавлено, как и в любом случае - однако, для конечного пользователя поведение кажется другим, что соответствует смыслу вопроса.
 BenAlabaster09 июн. 2009 г., 18:14
@ John / buti-oxa - Спасибо за ссылку, я прочитаю ее, как только получу момент. Я придерживаюсь своего утверждения, что вы не можете однозначно сказать, что это правильно или неправильно во всех ситуациях. Иногда есть очень хорошие и интуитивные причины для такого поведения. Я просто выделил эту точку, используя трей / часы в качестве двух примеров, что иногда это желательно.
 buti-oxa09 июн. 2009 г., 18:10
Ты прав. Раймонд Чен недавно написал на близкую тему:blogs.msdn.com/oldnewthing/archive/2009/04/30/9577283.aspx, Эта задержка в полсекунды неприятна.

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

Выделение текста (почти в каждом существующем приложении) - один клик для размещения курсора, двойной щелчок для выбора слова, тройной щелчок для выбора всей строки.Explorer / Finder - один щелчок, чтобы выбрать файл, двойной щелчок, чтобы открыть его.Outlook - один щелчок для предварительного просмотра электронной почты, двойной щелчок для открытия в новом окне.
 Stephen C. Steel23 июн. 2009 г., 19:44
Ни один из ваших примеров не показывает взаимоисключающие действия для одиночных и двойных кликов. Выделение текста: один щелчок устанавливает курсор, двойной щелчок -, выберите слово, УЖЕ ВЫБРАЛИ ПОЛОЖЕНИЕ КУРСОРА. Проводник: один щелчок выбирает файл, двойной щелчок открывает УЖЕ ВЫБРАННЫЙ ФАЙЛ. Outlook: одним щелчком мыши выбирается сообщение, и в качестве побочного эффекта его выбора, оно отображается в окне предварительного просмотра (если оно настроено), двойной щелчок открывает УЖЕ ВЫБРАННОЕ СООБЩЕНИЕ в своем собственном окне (и оно также остается в режиме предварительного просмотра). Во всех трех случаях один щелчок является предшественником двойного щелчка.

Ваш ответ на вопрос