App auf Taskleiste minimieren

114

Ich habe eine Windows Forms-App mit C # und Visual Studio 2010.

Wie kann ich meine App auf die Taskleiste minimieren (nicht auf die Taskleiste) und sie dann zurückbringen, wenn Sie doppelt in die Taskleiste klicken? irgendeine Idee? Wie kann ich ein Menü im Symbol in der Taskleiste erstellen und wenn ich mit der rechten Maustaste darauf klicke, wird ein Menü wie Anmelden, Trennen, Verbinden usw. angezeigt. Gibt es auch Methoden, um zu zeigen, wie ein Ballon aus der Taskleiste auftaucht?

PS: Ich habe bereits ein notifyIcon hinzugefügt, weiß aber nicht, wie ich es verwenden soll.

Will es
quelle
Hier können Sie einen großartigen Beispielcode herunterladen simple-talk.com/dotnet/.net-framework/…
Entwickler
Sie sollten sicher sein, dass Sie in die Designer.cs des Formulars gehen und den Ereignishandler "registrieren", da sonst keiner von diesen funktioniert (ich konnte es nicht herausfinden). Sie können dies tun, indem Sie Folgendes hinzufügen: this.Resize + = neuer System.EventHandler (this.ManagementForm_Resize);
Brad

Antworten:

149

Behandeln Sie das Größenänderungsereignis des Formulars. In diesem Handler überschreiben Sie die Grundfunktionen des Ereignisses "Größe ändern", damit das Formular auf die Taskleiste und nicht auf die Taskleiste minimiert wird. Gehen Sie dazu wie folgt in der Ereignisbehandlungsroutine Ihres Formulars vor: Überprüfen Sie, ob die WindowState-Eigenschaft des Formulars auf FormWindowState.Minimized festgelegt ist. Wenn ja, verbergen Sie Ihr Formular, aktivieren Sie das NotifyIcon-Objekt und zeigen Sie die Sprechblasen-Spitze mit einigen Informationen an. Sobald der WindowState zu FormWindowState.Normal wird, deaktivieren Sie das NotifyIcon-Objekt, indem Sie seine Visible-Eigenschaft auf false setzen. Jetzt soll das Fenster wieder angezeigt werden, wenn Sie in der Taskleiste auf das NotifyIcon-Objekt doppelklicken. Behandeln Sie dazu das MouseDoubleClick-Ereignis von NotifyIcon. Hier zeigen Sie das Formular mit der Show () -Methode.

private void frmMain_Resize(object sender, EventArgs e)
{
    if (FormWindowState.Minimized == this.WindowState)
    {
       mynotifyicon.Visible = true;
       mynotifyicon.ShowBalloonTip(500);
       this.Hide();
    }

    else if (FormWindowState.Normal == this.WindowState)
    {
       mynotifyicon.Visible = false;
    }
}
CD..
quelle
5
Sie können die Form.FormBorderStyle-Eigenschaft msdn.microsoft.com/en-us/library/…
CD ..
tnx! es hat funktioniert .. auch eine Idee, die Schaltflächen zum Minimieren, Schließen und Maximieren oben rechts zu deaktivieren? tnx
WantIt
tnx es hat auch funktioniert! Wenn ich auf das Symbol in der Taskleiste doppelklicke, befindet sich das Fenster nicht oben bei anderen Anwendungen. Ich muss mir Mühe geben, indem ich auf das Fenster in der Taskleiste klicke, damit es angezeigt wird. Wie können wir damit umgehen? tnx so viel
WantIt
69

Ich fand dies, um die gesamte Lösung zu erreichen. Die obige Antwort kann das Fenster nicht aus der Taskleiste entfernen.

private void ImportStatusForm_Resize(object sender, EventArgs e)
{
    if (this.WindowState == FormWindowState.Minimized)
    {
        notifyIcon.Visible = true;
        notifyIcon.ShowBalloonTip(3000);
        this.ShowInTaskbar = false;
    }
}

private void notifyIcon_MouseDoubleClick(object sender, MouseEventArgs e)
{
    this.WindowState = FormWindowState.Normal;
    this.ShowInTaskbar = true;
    notifyIcon.Visible = false;
}

Es ist auch sinnvoll, die folgenden Eigenschaften des Steuerelements für Benachrichtigungssymbole mithilfe des Formular-Designers festzulegen.

this.notifyIcon.BalloonTipIcon = System.Windows.Forms.ToolTipIcon.Info; //Shows the info icon so the user doesn't think there is an error.
this.notifyIcon.BalloonTipText = "[Balloon Text when Minimized]";
this.notifyIcon.BalloonTipTitle = "[Balloon Title when Minimized]";
this.notifyIcon.Icon = ((System.Drawing.Icon)(resources.GetObject("notifyIcon.Icon"))); //The tray icon to use
this.notifyIcon.Text = "[Message shown when hovering over tray icon]";
Ben Gripka
quelle
7
Sie fehlt this.Show();vorthis.WindowState = FormWindowState.Normal;
developerwjk
1
Tippfehler in "Der Benutzer macht nichts". ;)
Andrew
1
@developerwjk, es fehlt nicht, weil er nicht anruft Hide(). Das Problem bei diesem Ansatz ist jedoch, dass das Fenster weiterhin angezeigt wird, wenn Sie Alt-Tab drücken. Ich rufe lieber an Hide()und auf diese Weise müssen Sie die ShowInTaskbarImmobilie überhaupt nicht nutzen .
Andrew
@ Andrew Ich habe Probleme bei der Verwendung von Show()und Hide(); Nach dem Verstecken, Anzeigen und anschließenden Verstecken wird es nicht mehr angezeigt.
Newbieguy
@newbieguy, ich denke, Sie müssen eine neue Frage erstellen, da Ihr Problem nicht für einen Kommentar zu einer Antwort geeignet ist. Sie müssen weitere Informationen als den von Ihnen verwendeten Code angeben. Sie können einen Link zu der Antwort einfügen, die Sie zu verwenden versucht haben.
Andrew
17

Ich würde mitgehen

private void Form1_Resize(object sender, EventArgs e)
{
     if (FormWindowState.Minimized == this.WindowState)
     {
          notifyIcon1.Visible = true;
          notifyIcon1.ShowBalloonTip(500);
          this.Hide();    
     }
     else if (FormWindowState.Normal == this.WindowState)
     {
          notifyIcon1.Visible = false;
     }
}

private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e)
{
     this.Show();
     this.WindowState = FormWindowState.Normal;
}
Alejandro del Río
quelle
17

Vergessen Sie nicht, Ihrem notifyIcon eine Symboldatei hinzuzufügen, da diese sonst nicht in der Taskleiste angezeigt wird.

ewwink
quelle
der am meisten benötigte Teil im Thema. Können Sie ein bisschen mehr Informationen hinzufügen, wie Sie die Verwendung des Standardsymbols erzwingen können?
T.Todua
12

Versuche dies

 private void Form1_Load(object sender, EventArgs e)
    {
        notifyIcon1.BalloonTipText = "Application Minimized.";
        notifyIcon1.BalloonTipTitle = "test";
    }

    private void Form1_Resize(object sender, EventArgs e)
    {
        if (WindowState == FormWindowState.Minimized)
        {
            ShowInTaskbar = false;
            notifyIcon1.Visible = true;
            notifyIcon1.ShowBalloonTip(1000);
        }
    }

    private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e)
    {
        ShowInTaskbar = true;
        notifyIcon1.Visible = false;
        WindowState = FormWindowState.Normal;
    }
Tanmay Nehete
quelle
1
Wenn Sie sich nur vor der Taskleiste verstecken, anstatt aufzurufen this.Hide(), wird das Fenster weiterhin angezeigt, wenn Sie Alt-Tab ausführen.
Andrew
3

Dies ist die Methode, die ich in meinen Anwendungen verwende. Sie ist ziemlich einfach und selbsterklärend, aber ich gebe gerne weitere Details als Antwort auf Ihre Kommentare.

    public Form1()
    {
        InitializeComponent();

        // When window state changed, trigger state update.
        this.Resize += SetMinimizeState;

        // When tray icon clicked, trigger window state change.       
        systemTrayIcon.Click += ToggleMinimizeState;
    }      

    // Toggle state between Normal and Minimized.
    private void ToggleMinimizeState(object sender, EventArgs e)
    {    
        bool isMinimized = this.WindowState == FormWindowState.Minimized;
        this.WindowState = (isMinimized) ? FormWindowState.Normal : FormWindowState.Minimized;
    }

    // Show/Hide window and tray icon to match window state.
    private void SetMinimizeState(object sender, EventArgs e)
    {    
        bool isMinimized = this.WindowState == FormWindowState.Minimized;

        this.ShowInTaskbar = !isMinimized;           
        systemTrayIcon.Visible = isMinimized;
        if (isMinimized) systemTrayIcon.ShowBalloonTip(500, "Application", "Application minimized to tray.", ToolTipIcon.Info);
    }
Wespe
quelle
2
Diese und andere Lösungen haben ein Problem: Wenn das Formular unter anderen Fenstern ausgeblendet ist, möchte der Benutzer es höchstwahrscheinlich nicht minimieren, wenn er auf das Symbol klickt. Stattdessen sollte es fokussiert sein. Siehe meine Frage hier: stackoverflow.com/questions/36797442/…
maf-soft
1

Durch Klicken auf das Bild in der Taskleiste können Sie überprüfen, ob der Rahmen sichtbar ist, und dann Visible = true oder false setzen

Lorenzo Sogliani
quelle
1

... und fügen Sie für Ihr Rechtsklick-Benachrichtigungsmenü ein Kontextmenü zum Formular hinzu, bearbeiten Sie es und legen Sie Mausklickereignisse für jedes Kontextmenü fest, indem Sie darauf doppelklicken und es dann an das Benachrichtigungssystem1 anhängen, indem Sie die Eigenschaft ContextMenuStrip in der Benachrichtigungsmerkmal-Eigenschaft auswählen.

Ryu
quelle
-2

this.WindowState = FormWindowState.Minimized;

Hasala Senevirathne
quelle