notifyicon c#
¿Cuál es la forma correcta de minimizar la bandeja de una aplicación C#WinForms? (8)
Actualización: Parece que publiqué demasiado pronto. También estaba usando el truco de abajo para una herramienta mía. Esperando la solución correcta para esto ..........
Puede usar Windows.Forms.NotifyIcon para esto. http://msdn.microsoft.com/en-us/library/system.windows.forms.notifyicon.aspx
Agregue NotifyIcon al formulario, establezca algunas propiedades y listo.
this.ShowIcon = false;//for the main form
this.ShowInTaskbar = false;//for the main form
this.notifyIcon1.Visible = true;//for notify icon
this.notifyIcon1.Icon = ((System.Drawing.Icon)(resources.GetObject("notifyIcon1.Icon")));//set an icon for notifyicon
private void Form1_Shown(object sender, EventArgs e)
{
this.Hide();
}
¿Cuál es la forma correcta de minimizar una aplicación WinForms en la bandeja del sistema?
Nota: minimizar a la bandeja del sistema ; en el lado derecho de la barra de tareas por el reloj. No estoy preguntando sobre minimizar a la barra de tareas, que es lo que sucede cuando presionas el botón "menos" en la ventana.
He visto soluciones piratas como, "minimizar, establecer ShowInTaskbar = false, luego mostrar tu NotifyIcon".
Las soluciones como esta son hackish porque la aplicación no parece minimizar a la bandeja como otras aplicaciones, el código tiene que detectar cuándo establecer ShowInTaskbar = true, entre otros problemas.
¿Cuál es la forma correcta de hacer esto?
Ayudará,
public partial class Form1 : Form
{
public static bool Close = false;
Icon[] images;
int offset = 0;
public Form1()
{
InitializeComponent();
notifyIcon1.BalloonTipText = "My application still working...";
notifyIcon1.BalloonTipTitle = "My Sample Application";
notifyIcon1.BalloonTipIcon = ToolTipIcon.Info;
}
private void Form1_Resize(object sender, EventArgs e)
{
if (FormWindowState.Minimized == WindowState)
{
this.Hide();
notifyIcon1.ShowBalloonTip(500);
//WindowState = FormWindowState.Minimized;
}
}
private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e)
{
this.Show();
notifyIcon1.ShowBalloonTip(1000);
WindowState = FormWindowState.Normal;
}
private void maximizeToolStripMenuItem_Click(object sender, EventArgs e)
{
this.Show();
WindowState = FormWindowState.Normal;
}
private void closeToolStripMenuItem_Click(object sender, EventArgs e)
{
Close = true;
this.Close();
}
// Handle Closing of the Form.
protected override void OnClosing(CancelEventArgs e)
{
if (Close)
{
e.Cancel = false;
}
else
{
WindowState = FormWindowState.Minimized;
e.Cancel = true;
}
}
private void Form1_Load(object sender, EventArgs e)
{
// Load the basic set of eight icons.
images = new Icon[5];
images[0] = new Icon("C://icon1.ico");
images[1] = new Icon("C://icon2.ico");
images[2] = new Icon("C://icon3.ico");
images[3] = new Icon("C://icon4.ico");
images[4] = new Icon("C://icon5.ico");
}
private void timer1_Tick(object sender, EventArgs e)
{
// Change the icon.
// This event handler fires once every second (1000 ms).
if (offset < 5)
{
notifyIcon1.Icon = images[offset];
offset++;
}
else
{
offset = 0;
}
}
}
En el constructor de la Forma:
this.Resize += new EventHandler(MainForm_Minimize);
A continuación, use este método del Manejador de eventos:
private void MainForm_Minimize(object sender, EventArgs e)
{
if(this.WindowState == FormWindowState.Minimized)
Hide();
}
En realidad, no hay una forma administrada de hacer esa forma de animación en la bandeja en winforms nativos, sin embargo, puedes P / Invocar shell32.dll para hacerlo:
Alguna buena información aquí (en los comentarios, no en la publicación):
http://blogs.msdn.com/jfoscoding/archive/2005/10/20/483300.aspx
Y aquí está en C ++:
http://www.codeproject.com/KB/shell/minimizetotray.aspx
Puedes usar eso para descubrir qué cosas pinchar para tu versión de C #.
Este código está probado y admite muchas opciones.
Más aquí: http://code.msdn.microsoft.com/TheNotifyIconExample
Si tiene problemas para hacer que esto funcione, verifique que tiene
this.Resize += new System.EventHandler(this.Form1_Resize);
en el fom1.designer.cs
Similar como arriba ...
Tengo un manejador de eventos de cambio de tamaño que se activa cada vez que se cambia el tamaño de la ventana (Maximizado, minimizado, etc.) ...
public form1()
{
Initialize Component();
this.Resize += new EventHanlder(form1_Resize);
}
private void form1_Resize(object sender, EventArgs e)
{
if (this.WindowState == FormWindowState.Minimized && minimizeToTrayToolStripMenuItem.Checked == true)
{
NotificationIcon1.Visible = true;
NotificationIcon1.BalloonTipText = "Tool Tip Text"
NotificationIcon1.ShowBalloonTip(2); //show balloon tip for 2 seconds
NotificationIcon1.Text = "Balloon Text that shows when minimized to tray for 2 seconds";
this.WindowState = FormWindowState.Minimized;
this.ShowInTaskbar = false;
}
}
Esto le permite al usuario seleccionar si desean o no minimizar la bandeja a través de una barra de menú. Pueden ir a Windows -> y hacer clic en Minimizar a la bandeja. Si esto está marcado, y la ventana está cambiando de tamaño a Minimizado, entonces se minimizará a la bandeja. Funciona sin problemas para mí.
this.WindowState = FormWindowState.Minimized
Esa es la manera integrada de hacerlo y me parece bien la mayor parte del tiempo. El único momento en que tiene cierta rareza es si lo llamas al inicio, lo que a veces tiene cierta rareza, por lo que la mayoría de las personas también establecerán ShowInTaskbar = false y también ocultarán el formulario.
http://msdn.microsoft.com/en-us/library/system.windows.forms.form.windowstate.aspx