Pregunta

Los atributos son impresionantes. Pero, ¿es posible crear una clase de atributo # C que, al etiquetado, hace que su aplicación a minimizar a la bandeja del sistema?

Técnicamente, tendría que ser colocado en la clase de la forma principal atributo. Una vez que el usuario hace clic en el botón X, que la forma no debe terminar, pero debe minimizar a la barra de tareas. El icono para minimizar También debe especificarse en el atributo.

Es esto técnicamente factible? No puedo encontrar ninguna información al sobrescribir el código de clase de un atributo colocado en dicha clase. (Es necesario al menos sobrescribir un método para que sea minimizar a la bandeja.)

¿Fue útil?

Solución

¿Por qué no hacer esto:

class TrayForm : Form
{
    NotifyIcon notifyIcon = new NotifyIcon();
    protected override void OnFormClosing(FormClosingEventArgs e)
    {
        if (e.CloseReason != CloseReason.WindowsShutDown && e.CloseReason != CloseReason.ApplicationExitCall)
        {
            e.Cancel = true;
            this.Hide();
            this.notifyIcon.Visible = true;
        }

        base.OnFormClosing(e);
    }

    protected override void OnSizeChanged(EventArgs e)
    {
        if (WindowState == FormWindowState.Minimized)
        {
            this.Hide();
            this.notifyIcon.Visible = true;
        }

        base.OnSizeChanged(e);
    }
}

Otros consejos

Esto podría lograrse más fácil con la herencia de formularios en lugar de atributos, algo que todavía va a tener que interpretar los atributos en tiempo de ejecución para lograr el efecto deseado.

Con la herencia que se acaba de configurar la clase de comportarse de la manera que gusta y tienen esencialmente una capacidad cabo opt-opt-in o (incluso utilizando un atributo para hacerlo).

Es ciertamente posible, pero me gustaría sugerir anulando método de forma estrecha () y simplemente poner un poco de código de reducción al mínimo en ese país. Es muy sencillo, lógico y fácil para futuros desarrolladores a seguir.

Algunos ejemplos de código en la forma de lograr esto es a:

http://www.dreamincode.net/code/snippet2660.htm

y

http://www.dreamincode.net/forums/showtopic116283.htm

No es posible con la clase Form habitual. Pero es posible crear una clase propia que hereda de Form y también es compatible con dicho atributo. Pero eso sólo haría las cosas innecesarias complicado, probablemente sería mejor añadir una propiedad MinimizeToTray a esa clase.

(como el ejemplo PhilipW proporcionan, pero con una propiedad añade para controlar el comportamiento)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top