【问题标题】:Close PrintPreviewDialog when ESC is pressed按下 ESC 时关闭 PrintPreviewDialog
【发布时间】:2010-02-03 17:26:20
【问题描述】:

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

【问题讨论】:

    标签: winforms print-preview


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 这是一个有趣的可能性,但我宁愿不必在表单中添加任何额外的控件。我找到了一个解决方案,该解决方案涉及覆盖对话框的 ProcessCmdKey 函数(请参阅我自己的答案,在本页的其他地方),对此我很满意。
      猜你喜欢
      • 2017-01-14
      • 1970-01-01
      • 1970-01-01
      • 2012-08-18
      • 1970-01-01
      • 2010-10-13
      • 2020-10-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多