按ESC时关闭PrintPreviewDialog

时间:2010-02-03 17:26:21

标签: winforms print-preview

我正在使用一个使用System.Windows.Forms.PrintPreviewDialog来显示“打印预览”对话框的WinForms应用程序。当用户在该对话框中按下ESC时,我想关闭对话框。不幸的是,我无法弄清楚如何做到这一点。我试图安装KeyDown / PreviewKeyDown事件处理程序,但它永远不会被调用。我也尝试将焦点设置到对话框(以及它的PrintPreviewControl),认为这是问题,但这也没有帮助。有谁知道如何使这项工作?

2 个答案:

答案 0 :(得分:4)

我最终自定义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);
    }
  }
}

答案 1 :(得分:0)

我没有试过这个,但是当你按下Esc时,System.Windows.Forms没有给CancelButton打电话?尝试创建一个虚拟取消按钮,在表单上调用.Close