2010-03-19 3 views
1

Я пытаюсь показать контекстное меню, когда я оставил клик NotifyIcon. Просто вызов NotifyIcon.ContextMenuStrip.Show() работает не очень хорошо. A solution has been posted here before, что вызывает секретный метод с использованием Reflection:Показать контекстное меню NotifyIcon и управлять его положением?

Dim mi As System.Reflection.MethodInfo = GetType(NotifyIcon).GetMethod("ShowContextMenu", Reflection.BindingFlags.Instance Or Reflection.BindingFlags.NonPublic) 
mi.Invoke(Icon, Nothing) 

Это прекрасно работает, за исключением того, что мне также нужно контролировать , где показано меню. Я хочу дождаться, когда SystemInformation.DoubleClickTime пройдет между получением события NotifyIcon.MouseUp и отображением меню, чтобы я мог обрабатывать отдельные клики и двойные щелчки отдельно. Но вызов метода ShowContextMenu отображает меню в текущей позиции мыши при вызове ShowContextMenu, а не при нажатии на значок. Это означает, что если мышь перемещалась во время DoubleClickTime, меню будет отображаться в другой части экрана. Поэтому, если я могу контролировать, где отображается меню, я могу просто сохранить координаты мыши, когда получаю событие MouseUp, а затем я могу убедиться, что меню отображается возле значка. Есть ли способ сделать это?

Заранее спасибо.

ответ

0

Ну, я только что обнаружил, что существуют существующие программы, которые демонстрируют такое же поведение. Я просто просмотрел все значки в моем системном трее, и около половины из них это сделали. Если вы щелкните левой кнопкой мыши по значку, а затем переместите мышь во время задержки до появления меню, меню появится в последнем месте мыши, где бы это ни было на экране. Snagit - это одно приложение, которое делает это. Outlook - единственная программа в моем лотке, в которой всегда отображается меню, в котором я щелкнул значок. Но Snagit похоже, что использует .NET ContextMenuStrip, в то время как Outlook, вероятно, использует собственное меню.

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

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