You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 10:27:28