Comment démarrer l’application WinForm réduite au plateau?

J’ai créé avec succès une application qui réduit au minimum la barre des tâches en utilisant NotifyIcon. Lorsque le formulaire est fermé manuellement, il est masqué depuis le bureau, la barre des tâches et l’onglet Alt. Le problème se produit lorsque vous essayez de démarrer avec l’application minimisée. Au début, le problème était que l’application serait réduite au minimum mais apparaîtrait toujours dans la boîte de dialog alt-tab. Changer le FormBorderStyle à l’une des options ToolWindow (à partir de l’option “Aucun”) a résolu ce problème, mais a introduit un autre problème. Lorsque l’application démarre pour la première fois, la barre de titre de la fenêtre réduite est visible juste au-dessus du menu Démarrer:

entrer la description de l'image ici

En ouvrant le formulaire et la fermeture, il se cache correctement. J’ai essayé beaucoup de variations, mais voici essentiellement comment ça marche maintenant …

WindowState est défini sur Minimized dans Designer. Après quelques initialisations dans le constructeur, j’ai les lignes suivantes:

this.Visible = false; this.ShowInTaskbar = false; 

Lorsque vous double-cliquez sur NotifyIcon, vous disposez des éléments suivants:

  this.WindowState = FormWindowState.Normal; this.Visible = true; this.ShowInTaskbar = true; 

Comme je l’ai dit, j’ai essayé de nombreuses variantes mineures (this.Hide (), etc.). Existe-t-il un moyen de faire en sorte que NotifyIcon soit le composant principal de sorte que je puisse complètement démarrer et supprimer le formulaire tout en laissant le NotifyIcon en cours d’exécution? Il doit y avoir un moyen de démarrer l’application avec la forme réduite au minimum sans aucune des étrangetés. S’il vous plait aidez moi à le trouver!

La bonne façon de procéder consiste à empêcher que le formulaire ne soit visible en premier lieu. Cela nécessite de remplacer SetVisibleCore (). Supposons un menu contextuel pour NotifyIcon avec une commande Show et Exit. Vous pouvez l’implémenter comme ceci:

 public partial class Form1 : Form { public Form1() { InitializeComponent(); notifyIcon1.ContextMenuSsortingp = contextMenuSsortingp1; this.showToolSsortingpMenuItem.Click += showToolSsortingpMenuItem_Click; this.exitToolSsortingpMenuItem.Click += exitToolSsortingpMenuItem_Click; } private bool allowVisible; // ContextMenu's Show command used private bool allowClose; // ContextMenu's Exit command used protected override void SetVisibleCore(bool value) { if (!allowVisible) { value = false; if (!this.IsHandleCreated) CreateHandle(); } base.SetVisibleCore(value); } protected override void OnFormClosing(FormClosingEventArgs e) { if (!allowClose) { this.Hide(); e.Cancel = true; } base.OnFormClosing(e); } private void showToolSsortingpMenuItem_Click(object sender, EventArgs e) { allowVisible = true; Show(); } private void exitToolSsortingpMenuItem_Click(object sender, EventArgs e) { allowClose = true; Application.Exit(); } } 

Notez une ride avec l’événement Load, il ne se déclenche pas tant que le formulaire principal n’est pas affiché pour la première fois. Veillez donc à effectuer l’initialisation dans le constructeur du formulaire, pas dans le gestionnaire d’événements Load.

Dans le constructeur , supprimez ces deux lignes:

 this.Visible = false; this.ShowInTaskbar = false; 

et append après InitializeComponent(); :

 this.WindowState = FormWindowState.Minimized; 

Dans concepteur, définissez ShowInTaskbar sur false et FormWindowState sur Normal .

EDIT: Si vous publiez la même chose dans l’événement Load, la fenêtre est réduite au minimum mais rest réduite au minimum sur le bureau. Je pense que c’est un bug.

Je lis toutes les réponses et je vois des hacks et de la magie noire …

Les gars, pas de hacks nécessaires. Vous n’avez même pas besoin de définir “ShowInTaskbar = false” et d’autres choses. Faites ceci:

  //"Form Shown" event handler private void Form_Shown(object sender, EventArgs e) { //to minimize window this.WindowState = FormWindowState.Minimized; //to hide from taskbar this.Hide(); } 

REMARQUE: Je recommande fortement de ne pas TOUCHER la propriété “ShowInTaskbar”. Par exemple, si votre application enregistre les raccourcis du système ou d’autres éléments similaires (hooks, etc) – le réglage de ShowInTaskBar = false et la minimisation de votre application empêcheront Windows d’envoyer des messages à votre fenêtre … arrête de travailler.

Lorsque vous réduisez une application et que vous souhaitez la masquer depuis Alt + Tab:

Vous devez également définir l’opacité pour arrêter l’affichage de la barre de titre près du menu Démarrer lorsque vous définissez le style de bordure sur une fenêtre d’outils.

On Minimize Event:

 this.Visible = false; this.Opacity = 0; this.FormBorderStyle = FormBorderStyle.FixedToolWindow; this.ShowInTaskbar = false; 

Evénement de normalisation:

 this.Visible = true; this.Opacity = 100; this.FormBorderStyle = FormBorderStyle.FixedSingle; //or whatever it was previously set to this.ShowInTaskbar = true; 

Ce “correctif rapide et sale” a fonctionné pour moi:

 $form1.FormBorderStyle = "fixedtoolwindow" $form1.top = -1000000 $form1.Left = -1000000 $form1.Width = 10 $form1.Height = 10 $form1.WindowState = "normal" $form1.ShowInTaskbar = $False $form1.Opacity = 0 $form1.Hide() 

J’espère que ça aide quelqu’un d’autre …