C# 禁用Ctrl+;webBrowser控件中的P

C# 禁用Ctrl+;webBrowser控件中的P,c#,browser,webbrowser-control,C#,Browser,Webbrowser Control,似乎不可能在webBrowser控件中禁用打印 以下是我尝试过的: 将WebBrowserShortcutsEnabled设置为FALSE 按ctrl+p时仍会显示打印对话框。这种行为看起来很奇怪,但根据我的测试,您可以在webbrowser控件仍具有焦点的情况下触发该对话框。如果单击另一个控件使webbrowser失去焦点,然后再次单击webbrowser,则无法触发打印对话框 在窗体的KeyDown事件中重写Ctrl+p 这似乎没有任何作用 使用Webbrowser的Preview

似乎不可能在webBrowser控件中禁用打印

以下是我尝试过的:

  • 将WebBrowserShortcutsEnabled设置为FALSE

    • 按ctrl+p时仍会显示打印对话框。这种行为看起来很奇怪,但根据我的测试,您可以在webbrowser控件仍具有焦点的情况下触发该对话框。如果单击另一个控件使webbrowser失去焦点,然后再次单击webbrowser,则无法触发打印对话框
  • 在窗体的KeyDown事件中重写Ctrl+p

    • 这似乎没有任何作用
  • 使用Webbrowser的PreviewKeyDown

    • 这似乎不是为了截取键,只是预览它们,因为你不能用它取消按键
如果禁用所有键盘快捷键,这将是最佳选择


一定有办法做到这一点?谢谢。

您可以尝试通过CSS禁用打印

<style type="text/css" media="print">
 .noprint { display:none }
 </style>


<body>
 <div> This can print</div> 
<div class="noprint"> This can't print</div> 
<div> This can print</div> 
</body> 

.noprint{display:none}
这个可以打印
这个不能打印
这个可以打印
工作示例

$(document).ready(function(e){
    $('body').keydown(function(event) {
       // alert('this');
        if (event.which == 80 && event.ctrlKey) {
            return false;
             //alert('me');   
        }
    });
});

最干净的方法可能是使用IDocHostUIHandler的TranslateAccelerator方法。另一方面,它是相当多的代码和处理HtmlInterop类的需要

然后,代码可以如下所示:

int IDocHostUIHandler.TranslateAccelerator(ref tagMSG msg, ref Guid group, uint nCmdID)
{
  KeyEventArgs e = new KeyEventArgs((Keys)((int)msg.wParam & 0xff) | Control.ModifierKeys);
  if (e.Modifiers == Keys.Control && e.KeyCode == Keys.P )
    return 0;
  return 1;
}

DocHostUIHandler可以附加到DocumentCompleted事件中的文档:

这是一个有趣的解决方案-谢谢。不过,我的客户希望打印对话框根本不显示。