2010-02-03 2 views
2

Я работаю над приложением WinForms, которое использует System.Windows.Forms.PrintPreviewDialog для отображения диалогового окна предварительного просмотра. Когда пользователь нажимает ESC в этом диалоговом окне, я хотел бы закрыть диалоговое окно. К сожалению, я не могу понять, как это сделать. Я попытался установить обработчик события KeyDown/PreviewKeyDown, но он никогда не вызывается. Я также попытался настроить фокус на диалог (и на его PrintPreviewControl), думая, что это проблема, но это тоже не помогло. Кто-нибудь знает, как это сделать?Закрыть PrintPreviewDialog при нажатии ESC

ответ

3

Я закончил настройку PrintPreviewDialog и переопределив его метод ProcessCmdKey, чтобы закрыть форму, когда пользователь нажимает ESC. Это кажется самым чистым решением.

Вот код, который я написал:

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

Хорошее решение, спасибо, что разместили его на свой вопрос. –

+0

Спасибо, это было действительно полезно –

0

Я не пробовал, но не System.Windows.Forms s звонит CancelButton при нажатии Esc? Попробуйте создать кнопку «Отменить», которая вызывает .Close на форме.

+0

Это интересная возможность, но я предпочел бы не добавлять какие-либо дополнительные элементы управления в форме. Я нашел решение, которое включает в себя переопределение функции «ProcessCmdKey» диалогового окна (см. Мой собственный ответ, в другом месте на этой странице), который мне доволен. –

Смежные вопросы