2008-10-22 15 views
0

Je filtrons les messages qui viennent à une forme avec PreFilterMessage comme ceci:Comment fermer un formulaire .Net à partir de son PreFilterMessage()?

print("code sample");

public bool PreFilterMessage(ref Message m) 
{ 
    if (m.Msg == WM_KEYDOWN && (int)m.WParam == VK_ESCAPE) 
    { 
     this.Close(); 
     return true; 
    } 
    return false; 
} 

print("code sample");

mais la question est que la forme ne se ferme que pour la première fois. Après avoir rouvert un formulaire, il ne sera plus fermé en appuyant sur ESC.

Comment puis-je accomplir ceci?

Merci

Répondre

1

Je ne sais pas si cela correspond à ce que vous faites. Je règle généralement Form.CancelButton sur le bouton de fermeture ou d'annulation de mon formulaire, et il appelle automatiquement le bouton OnClick lorsque l'utilisateur touche Esc sur le clavier.

0

Selon MSDN

Les deux conditions lorsqu'une forme ne sont pas éliminés lors de la fermeture est en (1) il fait partie d'une application d'interface multidocument (MDI), ainsi que la forme ne soit pas visible; et (2) vous avez affiché le formulaire en utilisant ShowDialog. Dans ces cas, vous devrez appeler Dispose manuellement pour marquer tous les contrôles du formulaire pour la récupération de place.

Si vous vous formez montré en effet à l'aide ShowDialog(), puis en appelant Close() ne jetez pas votre formulaire. Vous pourriez toujours être capable de le "rouvrir" plus tard, et probablement c'est ce que vous faites. Je soupçonne que vous avez peut-être dissupté PreFilterMessage() lorsque vous le fermez pour la première fois. Avez-vous vérifié si la boucle de message fonctionne toujours? Ou vous devez réellement faire this.Visible = false; ou Control.Hide,

Lorsque la méthode Close est appelée sur un formulaire affiché comme une fenêtre modales, vous ne pouvez pas appeler la méthode Show pour rendre la forme visible, car ont déjà été libérés des ressources du formulaire . Pour masquer un formulaire et le rendre visible, utilisez la méthode Control .. ::. Hide.

puisque vous devez le "rouvrir" plus tard. Si vous vous attendez à ce que le formulaire disparaisse et que vous affichiez une nouvelle instance ultérieurement, appelez la procédure de suppression manuellement après la fermeture.

Questions connexes