2017-07-28 64 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

相關問題