minimizar la aplicación a la bandeja del sistema

Tengo una aplicación de formularios de Windows con C # y Visual Studio 2010.

¿Cómo puedo minimizar mi aplicación en la bandeja del sistema (no en la barra de tareas) y luego regresarla al hacer doble clic en la bandeja del sistema? ¿alguna idea? Además, ¿cómo puedo crear un menú en el icono de la bandeja del sistema y cuando hago clic derecho, aparece un menú como Iniciar sesión, Desconectar, Conectar, algo así. Además, ¿hay algún método para mostrar como un globo emergente de la bandeja del sistema?

PD: Ya agregué un notifyIcon, pero no sé cómo usarlo.

  • Bandeja del sistema C # Minimizar a la bandeja con NotifyIcon
  • Minimizar la ventana a la bandeja del sistema

Maneje el evento Resize de la forma. En este controlador, anula la funcionalidad básica del evento Resize para hacer que el formulario se minimice en la bandeja del sistema y no en la barra de tareas. Esto puede hacerse haciendo lo siguiente en el controlador de eventos Resize de su formulario: Compruebe si la propiedad WindowState del formulario está configurada en FormWindowState.Minimized. En caso afirmativo, oculte su formulario, habilite el objeto NotifyIcon y muestre la punta del globo que muestra cierta información. Una vez que WindowState se convierte en FormWindowState.Normal, deshabilite el objeto NotifyIcon estableciendo su propiedad Visible en falso. Ahora, desea que la ventana vuelva a aparecer cuando hace doble clic en el objeto NotifyIcon en la barra de tareas. Para esto, maneje el evento MouseDoubleClick de NotifyIcon. Aquí, muestra el formulario usando el método Show ().

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

Encontré esto para lograr la solución completa. La respuesta anterior no elimina la ventana de la barra de tareas.

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

También es bueno establecer las siguientes propiedades del control del icono de notificación mediante el diseñador de formularios.

 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]"; 

no se olvide de agregar el archivo de icono a su notifyIcon o no aparecerá en la bandeja.

Yo iría con

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

prueba esto

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

Este es el método que uso en mis aplicaciones, es bastante simple y se explica por sí mismo, pero me complace brindar más detalles en respuesta a sus comentarios.

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

Al hacer clic en la imagen en la bandeja del sistema, puede verificar si el marco está visible y luego debe establecer Visible = verdadero o falso

… y para su menú de notificación de clic derecho, agregue un menú contextual al formulario y edítelo y establezca eventos de clic de mouse para cada uno de los elementos contextuales haciendo doble clic en ellos y luego adjúntelo a notifyicon1 seleccionando ContextMenuStrip en la propiedad notifyicon.