我有一个简单的Windows Forms应用程序,无非就是包含Form
的WebBrowser
。
我覆盖了ProcessCmdKey方法,它工作正常。但是,尽管WebBrowser
是焦点,但仍会调用ProcessCmdKey
,但它不再获取关键代码。
protected override bool ProcessCmdKey(ref Message msg, Keys keyData){
//When webbrowser has focus, only control or S are found - not both.
if(keyData==(Keys.Control|Keys.S)){
//Do things here.
return true;
}
return false;
}
最佳答案
您是否尝试覆盖WebBroswer的ProcessCmdKey ...我隐约记得浏览器在处理事件方面做得很时髦...与安全性有关。是的,这里是:
http://msdn.microsoft.com/en-us/library/system.windows.forms.control.processcmdkey.aspx说:
在消息预处理期间调用此方法以处理命令键。命令键是始终优先于常规输入键的键。命令键的示例包括加速器和菜单快捷方式。该方法必须返回true表示已处理命令键,或者返回false表示该键不是命令键。仅当控件托管在Windows Forms应用程序中或作为ActiveX控件托管时,才调用此方法。
首先,ProcessCmdKey方法确定控件是否具有ContextMenu,如果具有,则启用ContextMenu处理命令键。如果命令键不是菜单快捷键,并且控件具有父级,则该键将传递给父级的ProcessCmdKey方法。最终结果是命令键在控制层次结构中“冒泡”。除了用户按下的键之外,键数据还指示与该键同时按下的修饰键(如果有的话)。修饰键包括SHIFT,CTRL和ALT键。
我认为不会让您拦截表单级别的浏览器键...我认为这些事件已由WebBrowser控件吞噬。
干杯。基思
编辑:
http://msdn.microsoft.com/en-us/library/system.windows.forms.keys.aspx说:
KeyCode用于从键值中提取键码的位掩码。
修饰符用于从键值中提取修饰符的位掩码。
该示例包含以下几行:
if(e.KeyCode != Keys.Back)
if (Control.ModifierKeys == Keys.Shift) {
因此,我想您需要将该密钥稍作改动,使其成为其组成部分。