Frage

Ich versuche, ein Kontextmenü zu zeigen, wenn ich ein NotifyIcon Linksklick. Nur Aufruf NotifyIcon.ContextMenuStrip.Show () nicht sehr gut funktionieren. Eine Lösung wurde hier vor geschrieben, die eine geheime Methode mit Reflexion ruft:

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

Dies funktioniert gut, außer dass ich auch die Kontrolle muß Dabei gilt: das Menü angezeigt wird. Ich mag für die SystemInformation.DoubleClickTime verstreichen warten zwischen dem NotifyIcon.MouseUp Ereignis zu empfangen und das Menü angezeigt wird, dass so kann ich separat Single-Klicks und Doppelklicks zu behandeln. Aber die Methode ShowContextMenu Aufruf zeigt das Menü an der aktuellen Mausposition, wenn ShowContextMenu genannt wird, nicht, wenn das Symbol tatsächlich geklickt wurde. Was bedeutet, dass, wenn die Maus während der DoubleClickTime bewegt, wird das Menü in einem anderen Teil des Bildschirms angezeigt werden. Also, wenn ich kontrollieren kann, wo das Menü angezeigt wird, kann ich nur speichert die Mauskoordinaten, wenn ich erhalte das MouseUp-Ereignis, und dann kann ich sicherstellen, dass das Menü neben dem Symbol angezeigt wird. Gibt es eine Möglichkeit, dies zu tun?

Vielen Dank im Voraus.

War es hilfreich?

Lösung

Nun, ich gerade entdeckt, dass es bestehende Programme, die das gleiche Verhalten zeigen. Ich ging durch alle die Symbole in meinem System-Tray und etwa die Hälfte von ihnen tun es. Wenn Sie das Symbol der linken Maustaste und dann bewegen Sie die Maus während der Verzögerung, bevor das Menü angezeigt wird, wird das Menü in der letzten Mausposition angezeigt werden, wo auch immer das auf dem Bildschirm ist. Snagit ist eine Anwendung, die dies tut. Outlook ist das einzige Programm in meinem Fach, das immer das Menü zeigt, wo ich auf das Symbol geklickt wird. Aber Snagit sieht aus wie eine .NET Context ist verwenden, während Outlook wahrscheinlich ein native Menü.

Also entweder ist das Standardverhalten, oder es ist ein Problem, dass niemand sonst entweder lösen konnte. Und als Benutzer, ich habe noch nie dieses Verhalten bis gestern bemerkt, wenn ich meine eigene Anwendung teste. Also ich denke, es ist nicht so große Sache, und ich werde ich keine Sorgen darüber.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top