2012-11-29 18 views
11

Ciao Nella mia applicazione C# sto cercando di minimizzare l'applicazione alla barra dei sistemi, quando il modulo è chiuso. Ecco il codice che ho provato.C# Minimizza al vassoio di sistema alla chiusura

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); 
     } 

    } 

e sto chiamando il metodo per formare l'evento di chiusura. Ma il problema è che non riduce al minimo il vassoio. Sta solo chiudendo il modulo.

+0

Quando il modulo viene chiuso o ridotto a icona? – Danpe

+0

Stai anche cancellando/fermando l'evento close? Questo codice non sarebbe di grande aiuto se l'app si chiudesse comunque dopo l'esecuzione. –

+0

Quando è chiuso. – Rakesh

risposta

10

Scrivi un evento nel modulo Evento di chiusura.

private void Form1_FormClosing(object sender, FormClosingEventArgs e) 
{ 
     e.Cancel = true;       
     Hide(); 
} 

E scrivere utilizzando la striscia di menu personalizzata per l'icona di notifica da mostrare.

+3

è necessario aggiungere la riga nel costruttore: this.FormClosing + = this.Form1_FormClosing; – temple

1

È necessario annullare l'evento FormClosing e quindi chiamare la funzione MinimizeToTray().

Questo viene eseguito tramite la proprietà Cancel dello FormClosingEventArgs.

Inoltre, è consigliabile utilizzare un bool da qualche parte per permettono chiudendo la Form in alcune condizioni, come ad esempio se si sta utilizzando un menu File > Exit o qualcosa del genere:

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

Invece di utilizzare allowClosing, è possibile scegliere quando chiudere con FormClosingEventArgs: if (e.CloseReason == CloseReason.UserClosing) { e.Cancel = true; this.WindowState = FormWindowState.Minimized; } –

0

È necessario utilizzare l'evento FormClosing.

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

e.Cancel = true; sarà annullando sempre l'evento, anche se si spegne il computer verso il basso, ma qui è un codice che ti aiuta:

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

che permetterà di chiudere il modulo programmaticaly.

+1

Questa soluzione è molto meglio, perché la soluzione di ** arun kumar non ascii ** è una storia infinita: D – Ismoh

+0

ho sperimentato che se non si imposta l'immagine icona di notifyIcon, quindi non viene mostrato nella barra delle applicazioni in Windows 8.1. – Fer

1

Per ridurre al minimo quando si chiude set WindowState a minimizzato

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

Sono sicuro che il codice funzionerà, ma sarà ancora più utile con un commento o due su cosa sta succedendo! – leo

+0

per notifyIcon1_MouseDoubleClick, dovresti usare 'this.Show()' invece di creare una nuova istanza di un modulo. Probabilmente vorresti che i controlli delle tue formazioni mantengano i loro valori. – prospector

0

È possibile gestire FormClosing evento come micsoft Form Closing Event come Seguendo esempio di C#

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... 
      } 
     } 
} 
Problemi correlati