Я работаю над приложением WinForms, которое использует System.Windows.Forms.PrintPreviewDialog
для отображения диалогового окна предварительного просмотра. Когда пользователь нажимает ESC в этом диалоговом окне, я хотел бы закрыть диалоговое окно. К сожалению, я не могу понять, как это сделать. Я попытался установить обработчик события KeyDown/PreviewKeyDown, но он никогда не вызывается. Я также попытался настроить фокус на диалог (и на его PrintPreviewControl), думая, что это проблема, но это тоже не помогло. Кто-нибудь знает, как это сделать?Закрыть PrintPreviewDialog при нажатии ESC
ответ
Я закончил настройку 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);
}
}
}
Я не пробовал, но не System.Windows.Forms
s звонит CancelButton
при нажатии Esc? Попробуйте создать кнопку «Отменить», которая вызывает .Close
на форме.
Это интересная возможность, но я предпочел бы не добавлять какие-либо дополнительные элементы управления в форме. Я нашел решение, которое включает в себя переопределение функции «ProcessCmdKey» диалогового окна (см. Мой собственный ответ, в другом месте на этой странице), который мне доволен. –
Хорошее решение, спасибо, что разместили его на свой вопрос. –
Спасибо, это было действительно полезно –