2012-11-29 15 views
11

Hi In meiner C# -Anwendung versuche ich, die Anwendung auf die Taskleiste zu minimieren, wenn das Formular geschlossen wird. Hier ist der Code, den ich ausprobiert habe.C# Beim Schließen der Taskleiste in die Taskleiste minimieren

public void MinimizeToTray() 
    { 
     try 
     { 
      notifyIcon1.BalloonTipTitle = "Sample text"; 
      notifyIcon1.BalloonTipText = "Form is minimized"; 

      if (FormWindowState.Minimized == this.WindowState) 
      { 
       notifyIcon1.Visible = true; 
       notifyIcon1.ShowBalloonTip(500); 
       this.Hide(); 
      } 
      else if (FormWindowState.Normal == this.WindowState) 
      { 
       notifyIcon1.Visible = false; 
      } 
     } 
     catch(Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 

    } 

und ich rufe die Methode zum Schließen Ereignis. Aber das Problem ist, dass es nicht minimiert wird. Es schließt nur die Form.

+0

Wenn das Formular geschlossen oder minimiert wird? – Danpe

+0

Stoppen/stoppen Sie auch das Close-Event? Dieser Code würde nicht viel helfen, wenn die App nach der Ausführung trotzdem geschlossen wird. –

+0

Wenn es geschlossen ist. – Rakesh

Antwort

10

Schreibe eine Veranstaltung in der Formularabschlussveranstaltung.

Und schreiben Sie mit benutzerdefinierten Menüleiste für Benachrichtigung Symbol für zu zeigen.

+3

müssen Sie die Zeile im Konstruktor hinzufügen: this.FormClosing + = dies.Form1_FormClosing; – temple

1

Sie sollten das Ereignis FormClosing abbrechen und dann Ihre MinimizeToTray()-Funktion aufrufen.

Dies geschieht über die Cancel Eigenschaft der FormClosingEventArgs.

Bedenken Sie auch eine Verwendung bool irgendwo erlauben die Form unter bestimmten Bedingungen zu schließen, wie wenn Sie ein File > Exit Menü oder etwas verwenden:

private void Form1_FormClosing(object sender, FormClosingEventArgs e) 
{ 
    if(!allowClosing) 
    { 
     e.Cancel = true; 
     MinimizeToTray(); 
    } 
} 
+0

Anstatt das allowClosing zu verwenden, können Sie festlegen, wann mit FormClosingEventArgs geschlossen werden soll: if (e.CloseReason == CloseReason.UserClosing) { e.Cancel = true; this.WindowState = FormWindowState.Minimized; } –

0

Sie müssen das FormClosing-Event verwenden.

private void Form1_FormClosing(Object sender, FormClosingEventArgs e) { 
    e.Cancel = true; 
    MinimizeToTray(); 
} 
29

e.Cancel = true; Code wird immer das Abbrechen des Ereignisses sein, auch wenn Sie den Computer heruntergefahren, aber hier ist ein Code, den Sie hilft:

private void Form1_FormClosing(object sender, FormClosingEventArgs e) 
{ 
    if (e.CloseReason == CloseReason.UserClosing) 
    { 
      myNotifyIcon.Visible = true; 
      this.Hide(); 
      e.Cancel = true; 
    } 
} 

Es ermöglicht programmaticaly das Formular zu schließen.

+1

Diese Lösung ist viel besser, denn die Lösung von ** arun kumar non ascii ** ist eine nie endende Geschichte: D – Ismoh

+0

Ich habe festgestellt, dass wenn Sie NotifyIcon's Icon Image nicht einstellen, wird es nicht in der Taskleiste in Windows angezeigt 8.1. – Fer

1

zu minimieren, wenn Window zu Minimierte

private void Form1_FormClosing(Object sender, FormClosingEventArgs e) { 
    e.Cancel = true; 
    WindowState = FormWindowState.Minimized; 
} 
2
namespace MinimizeTrayNotification 
    { 
     public partial class Form1 : Form 
     { 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void MinimzedTray() 
    { 
     notifyIcon1.Visible = true; 
     notifyIcon1.Icon = SystemIcons.Application; 

     notifyIcon1.BalloonTipText = "Minimized"; 
     notifyIcon1.BalloonTipTitle = "Your Application is Running in BackGround"; 
     notifyIcon1.ShowBalloonTip(500); 

    } 

    private void MaxmizedFromTray() 
    { 
     notifyIcon1.Visible = true; 
     notifyIcon1.BalloonTipText = "Maximized"; 
     notifyIcon1.BalloonTipTitle = "Application is Running in Foreground"; 
     notifyIcon1.ShowBalloonTip(500); 


    } 



    private void Form1_Resize(object sender, EventArgs e) 
    { 
     if(FormWindowState.Minimized==this.WindowState) 
     { 
     MinimzedTray(); 
     } 
     else if (FormWindowState.Normal == this.WindowState) 
     { 

      MaxmizedFromTray(); 
     } 
     } 

    private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e) 
    { 
     this.WindowState = FormWindowState.Normal; 
     Form1 frm = new Form1(); 
     frm.Show(); 
     MaxmizedFromTray(); 


    } 

    private void notifyIcon1_MouseClick(object sender, MouseEventArgs e) 
    { 
     this.WindowState = FormWindowState.Normal; 
    } 

    private void Form1_FormClosing(object sender, FormClosingEventArgs e) 
    { 
     if (e.CloseReason == CloseReason.UserClosing) 
     { 
      e.Cancel = true; 
      this.WindowState = FormWindowState.Minimized; 
      this.ShowInTaskbar = false; 
      this.Hide(); 

     } 


    } 

    private void notifyIcon1_Click(object sender, EventArgs e) 
    { 
     this.WindowState = FormWindowState.Normal; 
     notifyIcon1.BalloonTipText = "Normal"; 
     notifyIcon1.ShowBalloonTip(500); 
    } 
} 

}

+1

Ich bin mir sicher, dass der Code funktioniert, aber es wird noch hilfreicher sein, mit ein oder zwei Kommentaren darüber, was vor sich geht! – leo

+0

für notifyIcon1_MouseDoubleClick sollten Sie 'this.Show()' anstelle einer neuen Instanz eines Formulars verwenden. Wahrscheinlich möchten Sie, dass Ihre Formularsteuerelemente ihre Werte beibehalten. – prospector

0

Sie FormClosing Ereignis behandeln wie micsoft Form Closing Event kann beispielsweise von C#

wie folgend gesetzt Schließ
private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e) 
    { 
     // Determine if text has changed in the textbox by comparing to original text. 
     if (textBox1.Text != strMyOriginalText) 
     { 
      // Display a MsgBox asking the user to save changes or abort. 
      if (MessageBox.Show("Do you want to save changes to your text?", "My Application", 
       MessageBoxButtons.YesNo) == DialogResult.Yes) 
      { 
       // Cancel the Closing event from closing the form. 
       e.Cancel = true; 
       // Call method to save file... 
      } 
     } 
} 
Verwandte Themen