3

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

4

2 回答 2

5

当用户按下 ESC 时,我最终自定义PrintPreviewDialog并覆盖了其ProcessCmdKey关闭表单的方法。这似乎是最干净的解决方案。

这是我写的代码:

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);
    }
  }
}
于 2010-02-05T14:41:48.557 回答
0

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

于 2010-02-03T18:40:50.777 回答