我们如何阻止鼠标点击和按键被传输到 Web 浏览器中上传的文档?

How we can stop mouse clicks and key presses from being transfered to loaded document in WebBrowser?

我已将文档加载到 WebBrowser。 我希望它保持可滚动并对鼠标移动做出反应(在鼠标悬停时更改颜色等),但完全不会对鼠标点击和按键做出反应。

我该怎么做?

我无法使用 WebBrowser.Document.Click 活动。 AllowNavigation 也不是一个选项。它只抑制导航,而不抑制像脚本那样的反应。 我看到了 PreviewKeyDown 事件,但我还是看不出如何取消新闻传播。通常我们在这样的事件中有类似 e.Cancel 的东西。

也许把所有东西都包在一个 div 里然后做

document.getElementById('SOMEDIV').addEventListener('click', function(e) {
e.preventDefault(); //Don't do anything on click

});

我还没有彻底测试过这个,但它应该给你一个好的开始:

public partial class Form1 : Form, IMessageFilter
{

    private const int WM_KEYDOWN = 0x0100;

    private const int WM_LBUTTONDOWN = 0x201;
    private const int WM_LBUTTONDBLCLK = 0x0203;
    private const int WM_RBUTTONDOWN = 0x0204;
    private const int WM_RBUTTONDBLCLK = 0x0206;

    public Form1()
    {
        InitializeComponent();
        this.Load += Form1_Load;
    }

    void Form1_Load(object sender, EventArgs e)
    {
        Application.AddMessageFilter(this);
    }

    public bool PreFilterMessage(ref Message m)
    {
        switch(m.Msg)
        {
            case WM_KEYDOWN:
                Control ctl = this.ActiveControl;
                if ((ctl != null) && ctl.Equals(this.WebBrowser))
                {
                    return true;
                }
                break;

            case WM_LBUTTONDOWN:
            case WM_LBUTTONDBLCLK:
            case WM_RBUTTONDOWN:
            case WM_RBUTTONDBLCLK:
                Rectangle rc = this.WebBrowser.RectangleToScreen(new Rectangle(new Point(0, 0), this.WebBrowser.ClientSize));
                return rc.Contains(Cursor.Position);
        }

        return false;
    }

}