Programm in den Tray "Ausgeblendete Symbole" minimieren

  • VB.NET

Es gibt 16 Antworten in diesem Thema. Der letzte Beitrag () ist von Wuppertaler93.

    Programm in den Tray "Ausgeblendete Symbole" minimieren

    Hallo liebe Community,

    Ich bastel mir gerade ein Programm welches sich beim Beenden Minimieren soll und zwar in den rechten Bereich der Taskleiste

    ich habe es mit Vollgendem Code versucht: (ja mein VB kennt .ico nicht)


    Quellcode

    1. e.Cancel = True
    2. Me.Hide()
    3. Dim NTFY As New NotifyIcon
    4. 'NTFY.Icon = My.Resources.ico
    5. NTFY.Visible = True
    6. NTFY.ShowBalloonTip(5000, "Info", "Ich bin ein Notifyicon...", ToolTipIcon.Info)


    aber das Programm ist dann weg (komplett unsichtbar nurnoch im tskmgr)
    was mache ich Falsch?

    Wuppertaler93 schrieb:

    beim Beenden
    soll sich das Programm denn nun beenden oder nicht?
    Ich denke, Du beendest das Hauptprogramm und dabei wird ein Thread nicht sauber mit beendet, und den siehst Du im Taskmanager.
    Also: Was genau soll passieren mit welchen Mitteln?
    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!
    So wie ich das verstanden habe, willst Du ein Programm schließen (X klicken)
    das Programm soll dann aber nicht beendet werden, das Fenster soll nur unsichtbar sein und im Infobereich der Taskbar soll ein Icon sein, mit dem man das Programm z.B. wieder sichtbar machen kann.

    Das geht folgendermaßen:
    1. Füge deinem Formular eine Steuerelement vom Typ NotifyIcon hinzu
    - Name = nfi
    - Icon = Suche Dir ein schönes Icon aus
    2. Füge deinem Formular ein Steuerelement vom Typ ContextMenuStrip hinzu
    - Füge dem ContextMenuStrip ein MenuItem hinzu (z.B. Wiederherstellen)
    - Dem unter 1. hinzugefügten NotifyIcon gibst Du als Eigenschaft ContextMenuStrip dieses ContextMenuStrip mit.

    Dann folgender Code

    VB.NET-Quellcode

    1. Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
    2. Me.WindowState = FormWindowState.Minimized
    3. Me.Visible = False
    4. e.Cancel = True
    5. nfi.Visible = True
    6. End Sub


    VB.NET-Quellcode

    1. Private Sub WiederherstellenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles WiederherstellenToolStripMenuItem.Click
    2. nfi.Visible = False
    3. Me.WindowState = FormWindowState.Maximized
    4. Me.Visible = True
    5. Me.Focus()
    6. End Sub


    Ich hoffe das hilft weiter

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

    Ich würde sowas ja ungern haben bei einem Programm.
    Schließen = ZU.
    Ggf. ne Abfrage ob nur in den Tray minimiert werden soll.
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    Ich kenne das bei vielen Programmen, bei denen man zwar ein Konfigurationsfenster einfach zu macht, das Programm aber weiter im Hintergrund läuft.
    z.B. VPN-Client, Monitoring-Software, CTI-Software etc.

    noch 'ne kleine Änderung wenn Du willst, dass das Programm wieder in der "normalen" Größe erscheint.

    VB.NET-Quellcode

    1. Private Sub WiederherstellenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles WiederherstellenToolStripMenuItem.Click
    2. nfi.Visible = False
    3. Me.Visible = True
    4. Me.WindowState = FormWindowState.Normal
    5. End Sub
    Ist

    tbaum schrieb:

    ein Konfigurationsfenster
    ein Programm an sich
    oder
    hat ein Programm auch ein Konfigurationsfenster?
    =========
    Bevor wir und in Annahmologie ergießen, sollte @Wuppertaler93 zunächst präzise sagen, wasser will.
    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!
    hat er doch.
    Nur wir mögen es nicht - mit guten Gründen:

    MemoAnMichSelbst schrieb:

    Schließen = ZU.
    Das ist, was man vom Schließen eines Programms erwartet (und das zB Skype das anders handhabt ist ziemlich ärgerlich).

    Aber wenn man seinem Wunsch nachkommen will, sind Snippet sicher willkommen.
    Sie sollten aber auch funktionieren, und da habich Zweifel.
    zB weiss ich nicht, wie man bei einem minimierten Form das WiederherstellenToolStripMenuItem überhaupt klicksen können sollte.
    Also "Mögen wir nicht" klingt so als hättest du eine gespaltene Persönlichkeit ;)

    Aber das ist mittlerweile ein Designpattern bei vielen Programmen. Allerdings bieten die meisten die Möglichkeit es einzustellen, ob bei X das Programm geschlossen wird oder in den Tray minimiert wird. (Eigentlich alle Gamelauncher(Steam etc), VPN Programme, Chat ala Skype/Teamspeak, Controlpanel für Grafikarte/Soundkarte usw. machen das so)
    Das ist meine Signatur und sie wird wunderbar sein!
    ja, es grassiert.
    Und wir (wer immer damit gemeint sein mag) mögen es nicht.
    Weil es die Bedeutung des Schließen-Buttons verhunzt (streng genommen den Schließen-Button abschafft - dem Benutzer also "Benutzungs-Hoheit" entzieht).
    Ausserdem belegt son unschließbares Programm ja kontinuierlich Rechner-Resourcen. Und wenn schlecht gemacht, belegt es auch noch viel zuviel.

    Also wir mögen es nicht :thumbdown:
    Es ist nicht unschließbar. (Es läßt sich über das TrayIcon schließen)

    Es gibt Programme, die sind eigentlich nur die im Tray. Das was man öffnet ist nur eine Konfiguration GUI. Oft läuft dahinter ein Dienst (AV Programme, VPN Clients, diverse SQL Server, diverse Remoteverwaltungssoftware und so weiter)

    Daher muss man diese Programme normalerweise über das Tray Icon beenden. Mit dem X schließt man lediglich die Settingsanwendung die eine 2. Anwendung konfiguriert. Ich denke das ist der Gedanke dahinter.

    Und im Normalfall erhält man eine Meldung, dass ein Programm nur minimiert wird, bei den Programmen die dieses Verhalten nachmachen (obwohl es dort nicht "nötig" wäre).

    Außerdem, wie willst du ein Programm ins Tray Menu senden? Ich erwarte beim Minimieren lediglich das das Fenster weg ist, aber nicht, dass es aus der Taskleiste verschwindet!
    Das ist meine Signatur und sie wird wunderbar sein!
    Bevor es ausartet.
    klar, kann man nem NotifyIcon nen Contextmenu dran klatschen...
    Kann wie oben gepostet das Schließen abfangen und so minimieren.
    Durch das Menu am Icon ist es dann ja noch beendbar.

    Finde ich aber immernoch unschön. Ich täte es eher auf das "minimieren" verlegen. Sprich... Minimieren ins NotifyIcon. Schließen das Schließen lassen.
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D

    MemoAnMichSelbst schrieb:

    Bevor es ausartet.
    Rofl - ist es doch längst :P

    Und bekommt der TE auch mal eine Antwort auf seine Frage?
    Weil bereits in post#7 habichja - neben der "Mögenwirnicht"-Anmerkung vor allem angemerkt, dass die bisherigen @Topic-Antworten mir nicht zu funktionieren scheinen.
    Hier übrigens eine funktionierende NotifyIcon-App, allerdings glaub bisserl umständlicher als nötig:
    activevb.de/tipps/vbnettipps/tipp0030.html
    Ich sehe die obigen Antworten gar nicht als so falsch an.
    NotifyIcon mit nem Contextmenu...
    Beim Schließen e.Cancel
    Dann isses ja erstmal weg...
    Und im Contextmenu des NotifyIcons muss halt nen "schließen" und nen knopf für Visible = true hin.

    EDIT:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private _RealEnd As Boolean = False
    3. Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
    4. e.Cancel = Not _RealEnd
    5. Visible = _RealEnd
    6. NotifyIcon1.Visible = Not _RealEnd
    7. End Sub
    8. Private Sub AusToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles AusToolStripMenuItem.Click
    9. _RealEnd = True
    10. Close()
    11. End Sub
    12. Private Sub SichtbarToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles SichtbarToolStripMenuItem.Click
    13. Visible = True
    14. NotifyIcon1.Visible = False
    15. End Sub
    16. End Class
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D

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

    MemoAnMichSelbst schrieb:

    Spoiler anzeigen
    Ich sehe die obigen Antworten gar nicht als so falsch an.
    NotifyIcon mit nem Contextmenu...
    Beim Schließen e.Cancel
    Dann isses ja erstmal weg...
    Und im Contextmenu des NotifyIcons muss halt nen "schließen" und nen knopf für Visible = true hin.

    EDIT:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private _RealEnd As Boolean = False
    3. Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
    4. e.Cancel = Not _RealEnd
    5. Visible = _RealEnd
    6. NotifyIcon1.Visible = Not _RealEnd
    7. End Sub
    8. Private Sub AusToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles AusToolStripMenuItem.Click
    9. _RealEnd = True
    10. Close()
    11. End Sub
    12. Private Sub SichtbarToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles SichtbarToolStripMenuItem.Click
    13. Visible = True
    14. NotifyIcon1.Visible = False
    15. End Sub
    16. End Class


    Habe deinen Code jetzt versucht, Leider sehe ich es im Tray nicht :(
    (Fehlermeldung kommt auch keine)


    Zu den Anderen wieso ich es dadurch nicht Beendet haben möchte:

    Ich und Auch mein Team (Welches das Programm nutzt) möchten das so Haben, das Programm ist Lediglich für unseren Live Support da und wird demnach auch nicht öffentlich Zugänglich gemacht, und im Tray kann man halt besser Supporten als Geschloßen ;) (Auf das X zu klicken ist Halt eine Gewohnheit von z.b. LiveZilla und auch Steam bei uns)
    Hast du dem NotifyIcon überhaupt ein "icon" zugewiesen? ;D
    Also im Designer?
    Wenn da nix hinterlegt ist, kannst auch nix sehen :P
    Dem NotifyIcon ein icon zuweisen tust im Designer...
    Dem NotifyIcon das Contextmenu zuweisen tust ebenfalls im Designer.
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D