Winforms 是否显示NotifyIcon上下文菜单并控制其位置?

Winforms 是否显示NotifyIcon上下文菜单并控制其位置?,winforms,notifyicon,Winforms,Notifyicon,我试图在左键单击Notify图标时显示上下文菜单。仅调用NotifyIcon.ContextMenuStrip.Show()工作不太好。使用反射调用秘密方法的: Dim mi As System.Reflection.MethodInfo = GetType(NotifyIcon).GetMethod("ShowContextMenu", Reflection.BindingFlags.Instance Or Reflection.BindingFlags.NonPublic) mi.Invok

我试图在左键单击Notify图标时显示上下文菜单。仅调用NotifyIcon.ContextMenuStrip.Show()工作不太好。使用反射调用秘密方法的:

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时在当前鼠标位置显示菜单,而不是在实际单击图标时。这意味着如果鼠标在双击时间内移动,菜单将显示在屏幕的不同部分。因此,如果我可以控制菜单的显示位置,我可以在收到MouseUp事件时保存鼠标坐标,然后确保菜单显示在图标附近。有办法做到这一点吗


提前感谢。

嗯,我刚刚发现有一些现有的程序表现出同样的行为。我只是浏览了我的系统托盘中的所有图标,其中大约有一半的图标是这样做的。如果在菜单出现之前的延迟期间左键单击图标,然后移动鼠标,则菜单将显示在屏幕上的最后一个鼠标位置。Snagit就是这样一个应用程序。Outlook是我的任务栏中唯一一个始终显示我单击图标的菜单的程序。但Snagit看起来使用的是.NET ContextMenuStrip,而Outlook可能使用的是本机菜单

所以这要么是标准行为,要么是其他人都无法解决的问题。作为一个用户,直到昨天我测试自己的应用程序时,我才注意到这种行为。所以我想这没什么大不了的,我不会担心的