我们如何阻止鼠标点击和按键被传输到 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;
}
}
我已将文档加载到 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;
}
}