2011-10-21 1 views
3

L'application est compilée pour .NET 2.0 (si c'est pertinent). Initialement, le formulaire est créé avec ShowInTaskbar = false, il n'apparaît pas dans la barre des tâches et tout est cool. Cependant, lorsque certaines actions (faire glisser le fichier sur le formulaire et démarrer le téléchargement du fichier) font ShowInTaskbar = true (afin de montrer la progression avec la modification de la fenêtre title/win7), le formulaire principal disparaît. this.Show(), this.Visible = true - ils ne vous aident pas. Le formulaire est introuvable jusqu'à ce que ShowInTaskbar = false soit exécuté. Puis il apparaît au même endroit où il a disparu ... Des idées de ce qui pourrait arriver?ShowInTaskbar = true fait disparaître mon formulaire

+1

Modifier ShowInTaskbar a de gros effets secondaires, Winforms doit recréer la fenêtre. Un bug est que le formulaire disparaît de Application.OpenForms. Jamais entendu parler de devenir invisible cependant. Regardez la fenêtre de sortie pour les exceptions possibles. –

Répondre

1

Il fonctionne pour moi:

using System.Windows.Forms; 

class Test 
{ 
    static void Main() 
    { 
     Form form = new Form(); 
     Button button = new Button { Text = "Toggle" }; 
     button.Click += delegate { form.ShowInTaskbar = !form.ShowInTaskbar; }; 
     form.Controls.Add(button); 
     Application.Run(form); 
    } 
} 

Certes, il scintille lorsque vous appuyez sur, mais cela ne devrait pas être trop importante. Avez-vous des événements qui pourraient être déclenchés dans le cadre du changement, ce qui pourrait masquer votre formulaire?

+0

demain malade essayer de mettre en place un test de cas, voir si je pouvais reproduire le comportement. – marrat

1

Votre application est-elle occupée entre ShowInTaskBar = true et ... = false?

Votre application peut être invitée à répondre aux messages et à redessiner sa fenêtre, donc si elle est occupée et ne retourne pas le contrôle à la boucle de traitement, elle ne répondra pas (et donc mettra à jour l'écran) tu as fini de tout faire. Si tel est le cas, vous devrez peut-être déclencher votre traitement sur un Windows.Forms.Timer ou même utiliser un autre thread (BackgroundWorker ou ThreadPool) pour permettre à votre interface utilisateur de continuer à répondre pendant que vous effectuez votre traitement.

+0

il traite les événements très bien. quand il est fait apparaître dans la progression du téléchargement de la barre des tâches, il est affiché correctement. – marrat

3

Je sais que cette question a été posée il y a plus d'un an, mais elle apparaît encore de temps en temps dans les résultats de recherche google. Comme indiqué lors de la définition de ShowInTaskbar, les fenêtres recrée la totalité du formulaire (ou quelque chose comme ça). Donc, si vous avez des champs de saisie ou des contrôles comme ça, ils seront réinitialisés. Dans mon cas, j'ai utilisé ShowInTaskbar = false lorsque je veux réduire mon application à la zone de notification, de sorte que mon application n'apparaisse plus dans la barre des tâches lorsqu'elle est réduite. Le problème survient lorsque vous restaurez l'application à FormWindowState.Normal tous les contrôles que vous aviez précédemment sont réinitialisés.

Le travail consiste à supprimer tous les contrôles "this.Controls.Remove (control1)" du formulaire avant d'appeler ShowInTaskbar = false, puis de rajouter "this.Controls.Add (control1)" une fois le formulaire est restauré.

C'est mon travail. Espérons que cela vous aide et aide les autres.

+0

Merci pour l'indice. – Oliver

0

J'avais un problème avec un panneau qui disparaissait lorsque je définissais le "ShowInTaskbar" à false. Puis, quand j'essayais de revenir à la réalité, le panneau manquait toujours. Ça me rendait fou comme tous les autres contrôles étaient bien, sauf le panneau. Il a montré "activé", "visible" tout vrai, l'emplacement et la taille étaient les mêmes avant et après que "ShowInTaskbar" a été défini. Je suis tombé sur ce post et c'est ce qui a fonctionné pour moi. J'espère que ça aide les autres. Fondamentalement, je supprime et ajoute comme déjà indiqué ici dans les réponses. Je veux juste remercier tout le monde pour m'avoir aidé à fournir une solution.

Questions connexes