2017-07-28 8 views
0

Webブラウザにデザイナのプロパティでマウスクリックイベントがないため、新しいMouse-clickイベントハンドラを手動でWebブラウザコントロールに追加しようとしています。C#UserControl、Add Event Handler Manually

ユーザーがWebブラウザコントロール内をクリックするたびにコードを実行する必要があります。この回避策は、Webブラウザに既存のDocumentCompletedイベントハンドラを持たないハンドラを追加します。

以下のコードを実行すると、null例外が返されます。私はそれがこのようにすることが可能かどうか疑問に思っています。

EDIT: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

。ハンドラを追加する前に、 'WebBrowserReadyState.Complete'となる' webBrowser1''の 'ReadyState'の条件チェックを追加しようとしましたか? – praty

+0

追加した後、 'webBrowser1'は' WebBrowserReadyState.Complete'になく、必要なイベントハンドラは追加されません。それを 'WebBrowserReadyState.Complete'にする方法を教えてください。 – CodeCafe

+0

'while(webBrowser1.ReadyState!= WebBrowserReadyState.Complete) { Application.DoEvents(); } '私はこれを試しましたが、whileループでコードが邪魔になります。 – CodeCafe

答えて

0

あなたのコードは次のようにする必要がありますあなたがホスティングされているページで、あなたの `Document`または` Body`が完全にロードされていない場合、これが起こるかもしれ

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

ありがとうPraty、私は彼を試しましたが、Webブラウザは決して準備状態にないので、イベントは追加されません。 – CodeCafe

+0

これは珍しいことです!私が示唆しているのは、デバッグで、 'Document'と' Body'をヌルでない状態にしてそれに応じて状態を変更することです。 – praty

関連する問題