如何在PrintPreviewDialog中按Ctrl+P调出PrintDialog
解决PrintPreviewDialog添加Ctrl+P快捷键的问题
你可以通过两种方式实现Ctrl+P快捷键调用PrintDialog的需求,以下是具体方案:
方案一:给自定义打印按钮设置快捷键
直接为你创建的ToolStripButton添加快捷键配置,这样既保留按钮点击功能,又支持键盘快捷键:
修改button1_Click方法中的代码,在创建按钮后添加快捷键设置:
private void button1_Click(object sender, EventArgs e) { PrintPreviewDialog printPrvDlg = new PrintPreviewDialog(); ToolStripButton b = new ToolStripButton(); b.Image = ((System.Windows.Forms.ToolStrip)(printPrvDlg.Controls[1])).ImageList.Images[0]; b.DisplayStyle = ToolStripItemDisplayStyle.Image; // 添加快捷键配置 b.ShortcutKeys = Keys.Control | Keys.P; b.ShowShortcutKeys = true; // 可选,显示快捷键提示文字 b.Click += printPreview_PrintClick; ((ToolStrip)(printPrvDlg.Controls[1])).Items.RemoveAt(0); ((ToolStrip)(printPrvDlg.Controls[1])).Items.Insert(0, b); printPrvDlg.ShowDialog(); }
当PrintPreviewDialog窗口处于激活状态时,按下Ctrl+P就会触发按钮的Click事件,自动调出PrintDialog。
方案二:直接捕获PrintPreviewDialog的键盘事件
如果方案一未生效,可通过注册窗口的键盘事件直接处理快捷键:
在button1_Click方法中,添加PrintPreviewDialog的KeyDown事件处理:
private void button1_Click(object sender, EventArgs e) { PrintPreviewDialog printPrvDlg = new PrintPreviewDialog(); ToolStripButton b = new ToolStripButton(); b.Image = ((System.Windows.Forms.ToolStrip)(printPrvDlg.Controls[1])).ImageList.Images[0]; b.DisplayStyle = ToolStripItemDisplayStyle.Image; b.Click += printPreview_PrintClick; ((ToolStrip)(printPrvDlg.Controls[1])).Items.RemoveAt(0); ((ToolStrip)(printPrvDlg.Controls[1])).Items.Insert(0, b); // 添加键盘事件处理 printPrvDlg.KeyPreview = true; printPrvDlg.KeyDown += PrintPrvDlg_KeyDown; printPrvDlg.ShowDialog(); } // 新增键盘事件处理方法 private void PrintPrvDlg_KeyDown(object sender, KeyEventArgs e) { if (e.Control && e.KeyCode == Keys.P) { printPreview_PrintClick(null, EventArgs.Empty); e.Handled = true; // 标记事件已处理,避免重复响应 } }
这个方案直接监听窗口的键盘输入,当检测到Ctrl+P组合键时,直接调用你已有的printPreview_PrintClick方法。
两种方案都能实现你的需求,推荐优先使用方案一,因为它更贴合WinForms的控件设计逻辑。
内容的提问来源于stack exchange,提问作者user19638866
相关产品推荐
相关产品推荐

