2 votes

Winforms - pourquoi un "Show()" après un double clic dans la barre d'état système aboutit-il à la réduction de mon application ?

Winforms - pourquoi un "Show()" après un double clic dans la barre d'état système aboutit-il à la réduction de mon application ?

Comment puis-je m'assurer que, dans l'événement double-clic de la notification, mon formulaire principal caché redevient visible normalement, sans être minimisé (ni maximisé d'ailleurs) ?

3voto

Josip Medved Points 2307

Je suppose que vous avez placé votre application dans la barre d'état-major lors de l'action de minimisation. Dans ce cas, Show ne fait que rétablir la visibilité.

Essayez d'ajouter form.WindowState = Normal avant Show().

1voto

Hans Passant Points 475940

Il est souvent souhaitable de masquer votre formulaire avec le NotifyIcon pour que votre application démarre immédiatement dans le tray. Vous pouvez l'empêcher d'être visible en surchargeant la méthode SetVisibleCore(). Vous souhaitez également empêcher la fermeture du formulaire lorsque l'utilisateur clique sur le bouton X. Remplacez la méthode OnFormClosing pour masquer le formulaire. Vous voudrez un menu contextuel pour permettre à l'utilisateur de quitter réellement votre application.

Ajoutez un NotifyIcon et un ContextMenuStrip à votre formulaire. Donnez au CMS les commandes de menu Show et Exit. Faites en sorte que le code du formulaire ressemble à ceci :

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

  }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X