我有一个显示一些HTML的WebBrowser控件。
我希望用户能够复制整个文档,但不能执行其他任何操作。

我已经将IsWebBrowserContextMenuEnabledWebBrowserShortcutsEnabled属性设置为false,我想处理KeyUp并在用户按下Ctrl + C时运行一些代码。

我怎样才能做到这一点?
WebBrowser控件不支持键盘事件。
我尝试将表单的KeyUp事件与KeyPreview结合使用,但根本没有触发。

编辑:这是我的解决方案,受到Jerb的启发。

class CopyableWebBrowser : WebBrowser {
    public override bool PreProcessMessage(ref Message msg) {
        if (msg.Msg == 0x101    //WM_KEYUP
         && msg.WParam.ToInt32() == (int)Keys.C && ModifierKeys == Keys.Control) {
            DoCopy();
            return true;
        }
        return base.PreProcessMessage(ref msg);
    }
    void DoCopy() {
        Document.ExecCommand("SelectAll", false, null);
        Document.ExecCommand("Copy", false, null);
        Document.ExecCommand("Unselect", false, null);
    }
}

最佳答案

您也可以尝试此方法。将其放在您的主窗体区域中,它将捕获所有键盘命令。我使用它向动态创建的选项卡添加键盘快捷键。

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) {
    switch (keyData)
    {
        case Keys.Control|Keys.Tab:
            NextTab();
            return true;
        case Keys.Control|Keys.Shift|Keys.Tab:
            PreviousTab();
            return true;
        case Keys.Control|Keys.N:
            CreateConnection(null);
            return true;
    }
    return false;

关于c# - WebBrowser键盘快捷键,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1980515/

10-10 18:29
查看更多