2010-12-04 24 views
2

Chaque fois que je clique sur le bouton croix rouge près de la forme que je veux afficher une autre forme, mais en dépit d'avoir fermé gestionnaire d'événements, je suis incapable d'ouvrir une autre forme.événement Form.closed ne se déclenche pas

Voilà comment je suis en train d'ouvrir une autre forme:

private void Form1_Closed(object sender, System.EventArgs e) 
{ 
    itemMaster.Show(); 

} 

Quelqu'un pourrait-il s'il vous plaît me dire comment puis-je activer mon requirment?

Répondre

5

D'abord, vous devez utiliser l'événement FormClosed au lieu de Closed:

L'événement Closed est obsolète dans le .NET Framework version 2.0; utilisez plutôt l'événement FormClosed.MSDN page for the Form.Closed event

void Form1_FormClosed(object sender, FormClosedEventArgs e) 
{ 
    // ... 
} 

Deuxièmement, assurez-vous que vous avez effectivement souscrit à Form1 « événement de FormClosed:

Form1.FormClosed += Form1_FormClosed; 

Le concepteur Windows Forms doit avez ajouté automatiquement une ligne similaire quelque part dans InitializeComponent . Sinon, c'est la raison pour laquelle votre méthode de gestionnaire n'est pas appelée.

Si cela ne vous aide toujours pas, essayez de gérer l'événement FormClosing de FormClosed.

+0

+1 pour 'FormClosed' sur' Closed'. –

4

Si vous avez commencé votre application avec la déclaration suivante:

Application.Run(new Form1()); 

Lorsque vous fermez Form1, votre application se fermera. Même si vous ouvrez un autre formulaire, il sera détruit lorsque l'application se ferme. Pouvez-vous vous assurer que c'est le cas en mettant un point d'arrêt dans votre méthode Form1_Closed et voir que le point d'arrêt est atteint?

Si tel est le cas, ce qui se passe est votre code n'exécute mais depuis l'application se ferme, une autre forme de votre ferme aussi dès qu'il ouvre.

Pour corriger cela, Hide() form1 au lieu de le fermer. Poignée événement Form_Closing et appeler this.Hide() et mettre e.Cancel = true.

+0

+1 - C'était aussi ma première pensée. –

0

Lorsque vous avez terminé votre formulaire et que vous souhaitez le fermer (en cliquant sur un bouton de fermeture par exemple), veillez à utiliser Close(). Mon événement form_closing n'a pas tiré parce que je ne Dispose() en cliquant sur le bouton de fermeture. Je pense que la meilleure façon de fermer un formulaire est d'utiliser à la fois Close() et Dispose().

  • Close() => si vous avez besoin de faire quelque chose lors de la fermeture de la forme ...
  • Dispose() => pour détruire la forme (ressources de nettoyage).

    private void _btnClose_Click (expéditeur d'objet, EventArgs e) { Close(); Dispose(); }