C#Webbrowser禁用鼠标单击

时间:2018-07-19 14:25:07

标签: c# winforms

我想在c#WinForm Webbrowser控件中显示youtube视频,但是我想禁用所有用户交互(没有鼠标单击也没有键盘事件...)。

我正在捕获所有控件预览,鼠标和键盘事件,此外,我在加载的html文档中放置了一些处理程序,但未成功:

 void webBrowser1_DocumentCompleted( object sender, WebBrowserDocumentCompletedEventArgs e )
 {

     if(webBrowser1.Document != null) {
         var doc = webBrowser1.Document;

         doc.Body.Style = "overflow:hidden";
         doc.Click      += htmlDoc_Click;
         doc.MouseDown  += htmlDoc_MouseDown;
         doc.MouseMove  += htmlDoc_MouseMove;

         webBrowser1.Document.Body.Click     += new HtmlElementEventHandler(htmlDoc_Click);
         webBrowser1.Document.Body.MouseDown += new HtmlElementEventHandler(Document_MouseDown);
         webBrowser1.Document.Body.MouseUp   += new HtmlElementEventHandler(Document_MouseMove);
         webBrowser1.Document.Body.MouseUp   += new HtmlElementEventHandler(Document_MouseUp);


         HtmlElement head = doc.GetElementsByTagName("head")[0];
         HtmlElement mscript = doc.CreateElement("script");
         IHTMLScriptElement element = (IHTMLScriptElement)mscript.DomElement;
         element.text = "function handleMouseEvent(e) { "
                      + "var evt = (e==null ? event:e); "
                      + "return true; } "
                      + "document.onmousedown = handleMouseEvent; "
                      + "document.onmouseup   = handleMouseEvent; "
                      + "document.onclick     = handleMouseEvent; ";
         head.AppendChild(mscript);
     }
 }

我也可以在Web浏览器控件“前面”使用透明控件。

还有其他想法吗?

1 个答案:

答案 0 :(得分:2)

这是从标准WinForms面板派生的自定义控件,已修改为完全透明但“稳定”(接收Mouse事件)。

通过CreateParams添加ExStyle = WS_EX_TRANSPARENT来实现透明;

此外,使用Control.SetStyle()方法来修改控件行为,并添加以下ControlStyles

ControlStyles.Opaque 阻止绘制控件BackGround,因此它不受系统管理。
ControlStyles.SupportsTransparentBackColor 允许控件接受Alpha值作为背景色。
ControlStyles.ResizeRedraw 会在调整控件大小时重新绘制控件。

初始化自定义控件,将其必须引用的控件传递给覆盖。然后,它将自身调整为此引用控件的大小,从此度量中排除ScrollBar,以便可以使用它们。


要使其正常工作,请创建对OverlayPanel类的引用并调用辅助方法CreateOverlay(Control control)

private OverlayPanel overlayPanel;

private void CreateOverlay(Control control)
{
    overlayPanel = new OverlayPanel(this.webBrowser1);
    Controls.Add(overlayPanel);
    overlayPanel.BringToFront();
}

OverlayPanel类代码可以插入到Form或它自己的类文件中。
当Form中的所有控件都已设置其尺寸时,应创建该代码: 1}}事件或可见父窗体的任何其他时间。无论如何,Form.Shown()事件在大多数情况下也可能有效。

请注意,此Form.Load()目前没有OverlayPanel方法,如果在某个时候调整了覆盖控件的大小,则需要此方法。但这是一个非常简单的实现,如果需要的话。

Resize