Winforms - ¿Por qué un “Show ()” después de una bandeja del sistema, haga doble clic terminan en mi aplicación minimizada?

StackOverflow https://stackoverflow.com/questions/2575788

  •  24-09-2019
  •  | 
  •  

Pregunta

Winforms -? ¿Por qué un "Show ()" después de una bandeja de sistema de extremo doble clic en mi aplicación minimizada

¿Cómo me aseguro Enla NotifyIcon evento de doble clic que mi principal forma oculta vuelve visible como normal, no es minimizada (ni maximizado para el caso también)

¿Fue útil?

Solución

Me imagino que usted pone su aplicación en la bandeja de minimizar la acción. En ese caso, Mostrar solo restaura la visibilidad.

Trate de añadir form.WindowState = Normal antes Show ().

Otros consejos

Ocultar su formulario con el NotifyIcon es a menudo deseable para que su aplicación se inicia en la bandeja de inmediato. Puede evitar que se haga visible reemplazando el método SetVisibleCore (). También normalmente quiere evitar que se cierre cuando el usuario hace clic en el botón X, reemplazar el método OnFormClosing para ocultar el formulario. Usted querrá un menú contextual para permitir que el usuario realmente salir de su aplicación.

Añadir un NotifyIcon y una ContextMenuStrip a su formulario. Dar la CMS la serie y los comandos de menú Salir. Hacer que el código de formulario como el siguiente:

  public partial class Form1 : Form {
    bool mAllowClose;
    public Form1() {
      InitializeComponent();
      notifyIcon1.DoubleClick += notifyIcon1_DoubleClick;
      notifyIcon1.ContextMenuStrip = contextMenuStrip1;
      showToolStripMenuItem.Click += notifyIcon1_DoubleClick;
      exitToolStripMenuItem.Click += (o, e) => { mAllowClose = true; Close(); };
    }

    protected override void SetVisibleCore(bool value) {
      // Prevent form getting visible when started
      // Beware that the Load event won't run until it becomes visible
      if (!this.IsHandleCreated) {
        this.CreateHandle();
        value = false;
      }
      base.SetVisibleCore(value);
    }

    protected override void OnFormClosing(FormClosingEventArgs e) {
      if (!this.mAllowClose) {    // Just hide, unless the user used the ContextMenuStrip
        e.Cancel = true;
        this.Hide();
      }
    }

    void notifyIcon1_DoubleClick(object sender, EventArgs e) {
      this.WindowState = FormWindowState.Normal;  // Just in case...
      this.Show();
    }

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