2009-11-15 2 views
1

Je rencontre un comportement étrange avec des formulaires sur une application C# 3.5. En cliquant sur un bouton, mon formulaire1 se cache, crée un nouveau formulaire2 et affiche form2. Form1 contient également la méthode d'événement déclenchée lorsque form2 se ferme. Voici le code dans Form1:C# Formulaire Problème: nouvelle forme perdant le contrôle et se cachant aléatoirement

Form2 form2; 

void button1_Click(object sender, EventArgs e) 
    {   
     this.Hide(); 
     form2 = new form2(); 
     form2.Show(); 
     form2.FormClosed += new FormClosedEventHandler(form2_FormClosed);    
    } 

void form2_FormClosed(object sender, FormClosedEventArgs e) 
    { 
     form2.Dispose(); 
     form2 = null; 
     this.Show(); 
    } 

Maintenant, mon problème est que, parfois, quand j'ouvre form2 (cacher form1), ou quand je ferme form2 (montrant form1), la nouvelle forme viendra à l'écran pour une clignote puis se cache. Il est toujours ouvert et je peux le cliquer dans la barre des tâches pour le montrer à nouveau, mais la fenêtre elle-même est envoyée derrière toutes les autres fenêtres ouvertes. On dirait qu'il s'ouvre mais minimise instantanément.

Ce comportement se produit de manière aléatoire. Parfois, les formulaires s'ouvrent et se cachent sans problème, mais parfois ils perdent leur focus sur une autre fenêtre. J'ai essayé d'utiliser focus(), activate(), et le plus haut, mais tous ont échoué à empêcher la soudaine dissimulation.

Est-ce que quelqu'un sait pourquoi cela se produit et comment y remédier?

Merci.

+0

Pourquoi lancez-vous form2()? Ne devrait-il pas être form2 = new Form(); – Soviut

+0

@Soviut - pourrait être juste une faute de frappe lors de l'écriture de la question – ChrisF

+0

Pouvez-vous essayer avec ShowDialog()? – Stormenet

Répondre

1

Vous masquez votre formulaire trop tôt. Pendant un bref instant, votre application n'a pas de fenêtre pouvant contenir le focus. Cela oblige Windows à partir à la recherche d'une autre fenêtre pour faire le focus, il va en choisir un d'une autre application. Cette fenêtre sera maintenant la fenêtre de premier plan, votre deuxième forme ne sera pas mise au point et apparaîtra plus bas dans l'ordre Z. Le correctif est simple:

void button1_Click(object sender, EventArgs e) 
{   
    form2 = new form2(); 
    form2.Show(); 
    form2.FormClosed += new FormClosedEventHandler(form2_FormClosed);    
    this.Hide(); // Moved 
} 
+0

Merci l'homme, j'apprécie – Endo

+0

J'ai un problème similaire, mais la différence est "J'utilise showDialog au lieu de spectacle" – Sami

Questions connexes