NotifyIcon zwei Contexmenustrips

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von Haudruferzappeltnoch.

    NotifyIcon zwei Contexmenustrips

    Neu

    Ich habe eine kleine Anwendung, deren Taskbaricon und leeres Form1 schlicht ausgeblendet sind, um sie nur im Systray verfügbar zu machen. Die Anwendung verfügt bei NotifyIcon1 über Contextmenustrip1, der mit der rechten Maustaste aktiviert wird. Funktioniert alles wirklich vorzüglich!

    Nur stellt sich mir gerade die Frage, ob und wie ich NotifyIcon1 auch einen Contextmenustrip2 zuordnen kann, der mit der linken Maustaste aktivierbar ist und beim Linksklick ein zweites separat bestückbares Kontextmenü aufruft.

    Kann mir da mal jemand unter die Arme greifen?
    Gruss Alex

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „areiland“ ()

    Neu

    @areiland Das wäre der zweite Schritt vor dem ersten.
    Ist es möglich, ein NotifyIcon mit der linken Maustaste zu aktivieren?
    Ich denke nicht.
    Du kannst beim Icon der Form selbst linken und rechten Mausklick abfangen, das läuft über die Form-Maushandler.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Neu

    Ja eben, ich kann bei NotifyIcon zwischen linkem und rechtem Mausklick unterscheiden und entweder Form1 oder Contextmenustrip1 einblenden lassen. Dann muss es doch auch möglich sein, statt Form1 einen Contextmenustrip2 einblenden zu lassen.
    Gruss Alex

    Neu

    Poste mal den relevanten Code, besser ein ansonsten leeres Projekt.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Neu

    Dazu gibts keinen relevanten Code, denn das ist hier eine reine Verständnisfrage.

    Ich kann im Click Event des NotifyIcon1 zwar durchaus zwischen Links- und Rechtsklick unterscheiden, aber ich kann dem NotifyIcon1 irgendwie keinen zweiten ContextMenuStrip zuweisen, der beim Linksklick geöffnet wird, wenn dem Rechtsklick schon ein ContextMenuStrip zugewiesen wurde.

    Nochmal schlicht und einfach gefragt: Gehts, oder gehts nicht? Sollte doch nicht so schwer sein, eine entsprechende Aussage zu tätigen!
    Gruss Alex

    Neu

    Da du einen ContextMenuStrip schon zugewiesen hast und diesen per Rechtsklick aufrufen kannst, gibt es dazu relevanten Code. Den Startschuss kannst du ruhig bereitstellen, bzw. das Projekt, macht ja wahrscheinlich alles der Designer...Zumindest denke ich, dass Rod das meinte.

    Du kannst den entsprechenden ContextMenuStrip nachträglich zuweisen.

    Oder du kannst eine eigene NotifyIcon-Klasse implementieren, die entsprechend im Designer auch eine zweite Eigenschaft für eine zweite Zuweisung eines zweiten ContextMenuStrip erlaubt. Am Ende landest du in dieser Implementation aber an derselben Stelle, wo du auch den linken vom rechten Klick unterscheiden musst und entsprechend den ContextMenuStrip zuweist. Denn ich denke du kommst nicht weit genug runter um intern den zweiten CMS an den Linksklick zu koppeln. Ich weiß auch gar nicht wo das beim Rechtsklick passiert. Müsste man mal ein bissle stöbern

    Hm ja mit WndProc wird da der Mausklick abgegriffen. Nur blöd, dass man von NotifyIcon nichtmal erben kann. Warum eiglich nich?
    Auszug aus NotifyIcon

    VB.NET-Quellcode

    1. private void WndProc(ref Message msg)
    2. {
    3. switch (msg.Msg)
    4. {
    5. case 2048:
    6. switch ((int)msg.LParam)
    7. {
    8. ...
    9. case 517:
    10. if (contextMenu != null || contextMenuStrip != null)
    11. {
    12. ShowContextMenu();
    13. }
    14. WmMouseUp(ref msg, MouseButtons.Right);
    15. break;

    Dieser Beitrag wurde bereits 8 mal editiert, zuletzt von „Haudruferzappeltnoch“ ()

    Neu

    areiland schrieb:

    Nochmal schlicht und einfach gefragt: Gehts, oder gehts nicht? Sollte doch nicht so schwer sein, eine entsprechende Aussage zu tätigen!

    Wenn Du Dich ein wenig von .NET Möglichkeiten entfernst und stattdessen die ganz normalen Menü-APIs verwendest, ist es durchaus möglich zwei verschiedene ContextMenüs anzuzeigen.
    Mfg -Franky-

    Neu

    @areiland Nur der Vollständigkeit halber. API CreatePopupMenu -> learn.microsoft.com/en-us/wind…f-winuser-createpopupmenu Da steht eigentlich alles was Du brauchst. Erstelle zur Laufzeit einfach zwei PopupMenüs, fülle diese und zeige im passenden Click-Event das passende PopupMenü per TrackPopupMenu oder TrackPopupMenuEx mit dem Flag TPM_RETURNCMD an. Den Flag brauchst Du zur Auswertung welches MenüItem ausgewählt wurde. Zu diesen APIs findest Du haufenweise Beispiele im Internet.
    Mfg -Franky-

    Neu

    Haudruferzappeltnoch schrieb:

    ...Den Startschuss kannst du ruhig bereitstellen, bzw. das Projekt, macht ja wahrscheinlich alles der Designer...

    Es gibt ganz einfach gar kein aktuelles Projekt, in dem ich das bräuchte. Es hat mich nur am Rande interessiert, weil ich gerade an einem Traytool sitze, das ich von einem anderen Projekt ableite und dessen Funktionen ich zum Teil übernehme.

    Hier hab ich die aber nicht auf Form1, sondern baue sie komplett in Contextmenustrip1 ein. Und dabei hat sich mir eben die Frage gestellt, ob ich Notifyicon1 nötigenfalls auch zwei Contextmenustrips zuweisen kann, die auf einen linken und rechten Mausklick aufrufbar sind.

    Wie dem auch sei, meine Frage wurde ja ausreichend beantwortet.
    Gruss Alex

    Neu

    areiland schrieb:

    Ich habe eine kleine Anwendung

    areiland schrieb:

    Es gibt ganz einfach gar kein aktuelles Projekt
    Ja was denn nun :?:
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Neu

    Kann doch nicht so schwer sein, den Zusammenhang zu wahren!
    Ich brauche das aktuell nicht, sondern es hat mich im Zusammenhang mit dem aktuellen Projekt einfach interessiert, ob es grundsätzlich möglich ist. Mehr nicht! Es ging nur um die Machbarkeit, wenn sich dieses Problem eventuell mal stellen könnte.

    Ich stelle fest, dass es mit VB .NET wohl nicht direkt geht und mehr wollte ich eigentlich auch gar nicht wissen. Um diese Frage beantworten zu können, brauchs weder Beispielcodes meinerseits, noch irgendwelcher rethorischen Kniffe um mich zu veräppeln. Ein einfaches "Ja geht" oder "Nein geht nicht" hätte nämlich durchaus gereicht.
    Gruss Alex

    Neu

    Hi @areiland
    1. hier wird niemend veräppelt!
    2. Das Problem besteht darin, dass tatsächlich fast alles "geht" - es kommt eben nur auf den Aufwand an, welchen man dafür betreiben muss.
    3. Mit derartigen Auswürfen kann man es sich bei Helfern, die deren Freizeit opfern, schnell verderben... Auch in diesem Forum hat Höflichkeit einen grossen Stellenwert.

    Neu

    areiland schrieb:

    ob es grundsätzlich möglich ist. Mehr nicht! Es ging nur um die Machbarkeit, wenn sich dieses Problem eventuell mal stellen könnte
    Nichts ist Toyota, das sollte man wissen... Daher auf den Trichter kam hier keiner.

    areiland schrieb:

    Ich stelle fest, dass es mit VB .NET wohl nicht direkt geht und mehr wollte ich eigentlich auch gar nicht wissen. Um diese Frage beantworten zu können, brauchs weder Beispielcodes meinerseits, noch irgendwelcher rethorischen Kniffe um mich zu veräppeln. Ein einfaches "Ja geht" oder "Nein geht nicht" hätte nämlich durchaus gereicht
    So ein einfaches "ja geht" findest du in Post 6. Bzw. kommt es drauf an... Man kann den Effekt ganz leicht erzielen. Aber danach hast du ja nicht gefragt, dir geht es um eine Zuweisung und da du die Zuweisung auch nicht erklärt hast unterstelle ich mal, du meinst die Zuweisung, die man im Designer tätigt. Und wie man unschwer erkennen kann, ist da kein zweites Feld für eine zweite Zuweisung.
    Du siehst es ist keine simple Frage; wir müssen allerlei Zusatzannahme treffen, um eine sinnige Antwort zu geben. Und wenn eine Zusatzannahme falsch ist, was dann?
    Nach einem Beispielprojekt wurde gefragt, weil damit oft Antworten auf Fragen geliefert werden und eine entsprechende gemeinsame Grundlage für Fragensteller und Antworter besteht.
    Und gerade weil du auf Nachfragen reagierst als wolle man dich "veräppeln", sieht du außerdem, dass auf anderen Wegen auch keine Zusatzannahmen bestätigt werden können, in diesem expliziten Fall.

    Und von deinen "die wissen schon was ich meine" mal abgesehen, jetzt wo auch der Hintergrund des Threads klar ist, stell dir mal diese Frage: Warum sollte irgendwer was vormalen, was du gar nicht brauchst?