Détecter lorsqu'un formulaire a été fermé c #
J'ai un WinForm que je crée qui affiche une invite de commandes avec un bouton. C'est une coutume WinForm vue, comme un message de la boîte de dialogue n'était pas suffisant.
J'ai une formation de travailleur a commencé et en cours d'exécution. Je tiens également à sortir du tout(aBackgroundWorker.IsBusy
) de la boucle si le bouton sur "myForm" a été cliqué.
//MyProgram.cs
using(CustomForm myForm = new CustomForm())
{
myForm.Show(theFormOwner);
myForm.Refresh();
while(aBackgroundWorker.IsBusy)
{
Thread.Sleep(1);
Application.DoEvents();
}
}
Dès maintenant, dans le CustomForm
la Button_clicked
événement, j'ai
//CustomForm.cs
private void theButton_Click(object sender, EventArgs e)
{
this.Close();
}
Ai-je besoin d'ajouter plus de code pour le CustomForm de la classe ou de l'endroit où je déclarer et initialiser le formulaire afin d'être en mesure de détecter une fermeture?
source d'informationauteur jkh
Vous devez vous connecter pour publier un commentaire.
Pour détecter lorsque le formulaire est fermé, vous devez raccorder le FormClosed événement:
Sinon:
Vous peut-être aller trop. Pour afficher un formulaire, comme une boîte de dialogue de la fenêtre et attendre la sortie avant de rendre le contrôle de retour à l'appel de la forme, il suffit d'utiliser:
mySubForm.ShowDialog();
Cela va "bloquer" la principale forme jusqu'à ce que l'enfant est fermé.
Assurez-vous que votre arrière-plan travailleur prend en charge l'annulation et comme d'autres l'ont souligné utiliser la forme fermée de gestionnaire d'événements. Ce code doit vous diriger dans la bonne direction:
Poignée de la FormClosing cas de la forme pour être averti lorsque le formulaire est en cours de fermeture, de sorte que vous pouvez effectuer tout nettoyage.
Vous devriez être en mesure de s'accrocher dans l'FormClosing et FormClosed événements.
http://msdn.microsoft.com/en-us/library/system.windows.forms.form.formclosing.aspx
http://msdn.microsoft.com/en-us/library/system.windows.forms.form.formclosed.aspx
De clôture est avant qu'il soit fermé.
Fermées est, après il est fermé.
Un couple de choses...
Tout d'abord, il semble que la boucle est là pour empêcher l'exécution de la forme de procéder lorsque la boîte de dialogue est ouverte. Si c'est le cas, changez-vous
.Show(parent)
à.ShowDialog(parent)
. Qui prendra également en charge le reste de votre question.Noter que
this.Hide();
n'est pas le même quethis.Close();
dans la boîte de dialogue de votre substitution de l'événement fermé