2009-10-13 9 views
1

Comment remplacer la fonctionnalité par défaut lorsqu'un utilisateur clique sur le X dans une application basée sur un formulaire VB.NET?Fonctionnalité par défaut de surcharge VB.NET lorsque l'utilisateur clique sur le bouton X (Fermer le programme)

Je gère actuellement l'événement MyBase.Closing ... mais comme il s'agit d'une application DirectX, j'ai besoin de faire un peu de nettoyage avant d'autoriser la fermeture du formulaire.

+0

Pouvez-vous ajouter un peu plus de détails sur pourquoi l'événement de clôture n'est pas assez bon pour cette situation? – JaredPar

+0

Je dois envoyer un événement de fermeture de programme à notre gestionnaire d'événements personnalisé pour que l'application puisse se fermer de manière propre. Un certain nombre de choses doivent être déroulées ou nettoyées telles que des données non enregistrées ou des connexions au serveur ou à d'autres clients. –

Répondre

3

Si vous souhaitez effectuer un nettoyage supplémentaire avant la fermeture d'un formulaire, faites-le dans le formulaire Form Closing event.

Cet événement vous permet également d'annuler le formulaire à proximité de l'événement FormClosingEventArgs.Cancel property. vous dira pourquoi l'événement a été appelé CloseReason propriété de l'événement (vous vérifierait pour CloseReason.UserClosing)

+0

Ce n'est pas une option pour cette application. Je dois effectuer un nettoyage lorsque l'utilisateur clique sur X et que ce nettoyage ne peut pas être initié à partir de l'événement de fermeture. Ma question concerne l'annulation de la fonctionnalité du bouton X. –

+0

Le formulaire ne doit pas se fermer lorsque l'événement Clôture de formulaire se déclenche. Vous pouvez l'annuler. Cela ne correspondrait pas à vos besoins? –

+0

Cela ne serait pas adapté à mes besoins –

1

Si vous ne vous sentez pas à l'aise de mettre votre code en cas Form_Closing, la seule autre option que je suis au courant est un " pirater "que j'ai utilisé une ou deux fois. Il ne devrait pas être nécessaire de recourir à ce hack, mais le voici:


N'utilisez pas le bouton de fermeture normal. Au lieu de cela, créez votre formulaire afin qu'il n'ait pas ControlBox. Vous pouvez le faire en définissant ControlBox = false sur le formulaire, dans ce cas, vous aurez toujours la barre normale en haut du formulaire, ou vous pouvez définir FormBorderStyle du formulaire sur "Aucun". Il n'y aura pas de barre en haut, ni aucune autre bordure visible, vous devrez donc les simuler soit en dessinant sur le formulaire, soit en utilisant les contrôles du panneau.

Puis vous pouvez ajouter un bouton standard et faire . il regard comme un bouton de fermeture, et de mettre votre code de nettoyage là-bas à la fin de l'événement bouton, il suffit d'appeler this.Close() (C#) ou Me.Close() (VB)

2

Re vos autres commentaires, faire un Yack avant l'événement a été déclenché serait prématuré; après tout, un autre code pourrait annuler la fermeture, et vous seriez parti avec une forme scuppered. Personnellement, je serais tenté de passer outre OnClosed; pas beaucoup d'une tête VB, mais en C#:

protected override void OnClosing(CancelEventArgs e) 
    { 
     // check OK to close (save/cancel etc) 
     base.OnClosing(e); 
    } 
    protected override void OnClosed(EventArgs e) 
    { 
     // your code here 
     base.OnClosed(e); 
     // or here 
    } 
Questions connexes