当我左键单击NotifyIcon时,我正在尝试显示上下文菜单。只是调用NotifyIcon.ContextMenuStrip.Show()不能很好地工作。 A solution has been posted here before使用Reflection调用秘密方法:
Dim mi As System.Reflection.MethodInfo = GetType(NotifyIcon).GetMethod("ShowContextMenu", Reflection.BindingFlags.Instance Or Reflection.BindingFlags.NonPublic)
mi.Invoke(Icon, Nothing)
这很好用,除了我还需要控制显示菜单的 where 。我想等待接收NotifyIcon.MouseUp事件和显示菜单之间的SystemInformation.DoubleClickTime,以便我可以单独处理单击和双击。但是,当调用ShowContextMenu时,调用ShowContextMenu方法会在当前鼠标位置显示菜单,而不是在实际单击图标时。这意味着如果鼠标在DoubleClickTime期间移动,菜单将显示在屏幕的不同部分。因此,如果我可以控制菜单显示的位置,我可以在收到MouseUp事件时保存鼠标坐标,然后我可以确保菜单显示在图标附近。有没有办法做到这一点?
提前致谢。
答案 0 :(得分:0)
好吧,我刚刚发现现有程序表现出同样的行为。我刚刚浏览了系统托盘中的所有图标,其中大约一半是这样做的。如果您左键单击该图标,然后在菜单出现之前的延迟期间移动鼠标,则菜单将显示在屏幕上的最后一个鼠标位置。 Snagit就是这样做的一个应用程序。 Outlook是我托盘中唯一一个始终显示单击图标的菜单的程序。但是Snagit看起来好像在使用.NET ContextMenuStrip,而Outlook可能正在使用原生菜单。
因此,这是标准行为,或者是其他任何人都无法解决的问题。作为用户,直到昨天我测试自己的应用程序时才发现这种行为。所以我想这不是什么大不了的事情我也不会担心。