2010-02-03 47 views
2

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

回答

3

我结束了自定义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); 
    } 
    } 
} 
+0

很好的解决方案,谢谢你发布到你的问题。 – 2010-02-05 18:53:23

+0

谢谢,这真的很有帮助 – 2010-02-14 07:34:55

0

我还没有试过这个,但不要System.Windows.Forms当你按Esc时,请拨打CancelButton?尝试创建一个虚拟取消按钮,在表单上调用.Close

+0

这是一个有趣的可能性,但我宁愿没有任何额外的控件添加到窗体。我找到了一个解决方案,它涉及覆盖对话框的'ProcessCmdKey'函数(请参阅我自己的答案,在本页的其他地方),这让我很满意。 – 2010-02-05 14:44:01