Winforms 按ESC键时关闭PrintPreviewDialog

Winforms 按ESC键时关闭PrintPreviewDialog,winforms,print-preview,Winforms,Print Preview,我正在开发一个WinForms应用程序,它使用System.Windows.Forms.PrintPreviewDialog显示打印预览对话框。当用户在该对话框中按ESC键时,我想关闭该对话框。不幸的是,我不知道怎么做。我尝试安装KeyDown/PreviewKeyDown事件处理程序,但从未调用它。我还尝试将焦点设置到对话框(以及它的PrintPreviewControl),认为这就是问题所在,但这也没有帮助。有人知道如何实现这一点吗?我没有尝试过,但在按下Esc键时不要调用System.Wi

我正在开发一个WinForms应用程序,它使用
System.Windows.Forms.PrintPreviewDialog
显示打印预览对话框。当用户在该对话框中按ESC键时,我想关闭该对话框。不幸的是,我不知道怎么做。我尝试安装KeyDown/PreviewKeyDown事件处理程序,但从未调用它。我还尝试将焦点设置到对话框(以及它的PrintPreviewControl),认为这就是问题所在,但这也没有帮助。有人知道如何实现这一点吗?

我没有尝试过,但在按下Esc键时不要调用
System.Windows.Forms
s call
cancel按钮?尝试在表单上创建一个调用
.Close
的虚拟取消按钮。

我最终自定义并覆盖了它的方法,以便在用户按下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);
    }
  }
}

这是一个有趣的可能性,但我不想在表单中添加任何附加控件。我找到了一个解决方案,其中包括覆盖对话框的
ProcessCmdKey
函数(请参阅我自己的答案,本页其他地方),我对此感到满意。