2017-07-28 65 views
0

我试图手动向我的Web浏览器控件添加一个新的鼠标单击事件处理程序,因为Web浏览器在其设计器属性中没有鼠标单击事件。C#UserControl,手动添加事件处理程序

我需要运行一个代码,只要用户在网页浏览器控件内点击。此解决方法在Web浏览器没有通过其现有的DocumentCompleted事件处理程序处理程序中添加了该处理程序。

当我运行下面的代码时,它返回一个空异常。我想知道是否可以这样做。

编辑:我已添加while循环以确保webbrowser1完成加载。但是,现在它陷入了while循环。这是否意味着网页加载从未完成?

private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 
{ 
    try 
    { 
     while (webBrowser1.ReadyState != WebBrowserReadyState.Complete) 
     { 
      Application.DoEvents(); 
     } 
     webBrowser1.Document.Body.MouseDown += new HtmlElementEventHandler(Body_MouseDown); 
    } 
    catch (Exception ex) 
    { 
     Debug.WriteLine(ex.StackTrace); 
     Debug.WriteLine(ex.Message); 
    } 
} 

private void Body_MouseDown(Object sender, HtmlElementEventArgs e) 
{ 
    if(e.MouseButtonsPressed == MouseButtons.Left) 
    { 
     MessageBox.Show("File in web browser selected"); 
    } 
} 
+0

这可能发生,如果你的'Document'或'Body'在您主持未完全加载页面。在添加处理程序之前,您是否曾尝试将'webBrowser1'' ReadyState'的条件检查添加为'WebBrowserReadyState.Complete'? – praty

+0

添加后,我意识到'webBrowser1'不在'WebBrowserReadyState.Complete'中,我不需要添加我需要的事件处理程序。我如何确保它在'WebBrowserReadyState.Complete'中? – CodeCafe

+0

'while(webBrowser1.ReadyState!= WebBrowserReadyState.Complete) { Application.DoEvents(); }'我试过了,但代码被卡在while循环中。 – CodeCafe

回答

0

您的代码必须是这样:

private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 
{ 
    if (webBrowser1.ReadyState == WebBrowserReadyState.Complete) 
    { 
     webBrowser1.Document.Body.MouseDown += new HtmlElementEventHandler(Body_MouseDown); 
    } 
} 
+0

感谢Praty,我尝试了他,但事件从未添加,因为webbrowser从未处于就绪状态。 – CodeCafe

+0

这是罕见的!我会建议调试,看看你有'Document'和'Body'的状态为非空,并相应地改变条件。 – praty

相关问题