2009-07-14 2 views
2

Я пишу приложение, в котором пользователь должен иметь возможность изменять действие кнопки.Используйте правой кнопкой мыши кнопку Windows Forms

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

Я уже получил событие «Click», работающее для обычного нажатия кнопки, однако обработчик событий «MouseClick» работает некорректно.

Событие «MouseClick» активируется на обычных левых щелчках, но никогда не будет вызвано для щелчка правой кнопкой мыши.

Выполняется некоторая обработка событий по умолчанию, которая игнорирует этот щелчок правой кнопкой мыши?

ответ

2

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

+0

другое сообщение SO могло бы пригодиться: http://stackoverflow.com/questions/1044883/custom-user-control-in-c-right-click-menu-to-copy-text-java -developer-learnin – northpole

+1

Спасибо. Я буду использовать этот метод. В качестве примечания я просто обнаружил, что событие «MouseUp» было тем, над которым я должен был смотреть. –

+0

@birdlips: память короткая, но с другой стороны это было почти 20 дней назад: o) –

4

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

Возможно, что-то вроде этого?
http://www.codeproject.com/KB/buttons/SplitButton.aspx

+0

Согласен, очень нестандартный и запутанный. Плохой дизайн ИМО. –

+0

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

2

В кнопке (и некоторых других элементах управления) событие MouseClick запускается только для левой кнопки. См. MSDN.

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

3

Конечно, было бы лучше реализовать его на событии MouseDown, а не в событии MouseUp. я не понимаю, как это сильно отличается от Mouseclick события

редактировать: Только что попробовал это, и это работает удовольствие :)

0

Используйте событие Mouse UP ... тест, который Button.X и Button.Y находятся в пределах размер кнопки, иначе вы отталкиваете мышь от кнопки. Terry G

Смежные вопросы