2010-02-03 3 views
2

Je travaille sur une application WinForms qui utilise System.Windows.Forms.PrintPreviewDialog pour afficher une boîte de dialogue Aperçu avant impression. Lorsque l'utilisateur appuie sur ESC dans cette boîte de dialogue, je voudrais fermer la boîte de dialogue. Malheureusement, je ne peux pas comprendre comment faire cela. J'ai essayé d'installer un gestionnaire d'événements KeyDown/PreviewKeyDown, mais il n'est jamais appelé. J'ai également essayé de mettre l'accent sur le dialogue (et sur son PrintPreviewControl), en pensant que c'était le problème, mais cela n'a pas aidé non plus. Est-ce que quelqu'un a une idée de comment faire ce travail?Close PrintPreviewDialog lorsque ESC est pressé

Répondre

3

J'ai fini par personnaliser PrintPreviewDialog et en remplaçant sa méthode ProcessCmdKey pour fermer le formulaire lorsque l'utilisateur appuie sur ESC. Cela semble être la solution la plus propre.

Voici le code que j'ai écrit:

using System.Windows.Forms; 

namespace MyProject.UI.Dialogs 
{ 
    class CustomPrintPreviewDialog : PrintPreviewDialog 
    { 
    protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 
    { 
     // Close the dialog when the user presses ESC 
     if (keyData == Keys.Escape) 
     { 
     this.Close(); 
     return true; 
     } 

     return base.ProcessCmdKey(ref msg, keyData); 
    } 
    } 
} 
+0

Bonne solution, merci de l'avoir posté sur votre question. –

+0

Merci, c'était vraiment utile –

0

Je n'ai pas essayé cela, mais ne pas System.Windows.Forms s appeler CancelButton lorsque vous appuyez sur Echap? Essayez de créer un bouton d'annulation factice qui appelle .Close sur le formulaire.

+0

C'est une possibilité intéressante, mais je l'aurais plutôt pas d'ajouter des contrôles supplémentaires à la forme. J'ai trouvé une solution qui implique de surcharger la fonction 'ProcessCmdKey' de la boîte de dialogue (voir ma propre réponse, ailleurs sur cette page), ce dont je suis satisfait. –

Questions connexes