4

Web ブラウザー コンポーネントでマウス スクロールのイベントを正常にトラップした人はいますか?

同時にスクロールしたい 2 つの Web ブラウザー コントロールがあります。

ただし、Web ブラウザーのスクロール イベントはありません。

以下のようなイベントを作成したいのですが?誰もこれをやった、または見たことがありますか?

 private void webCompareSQL_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
                Document.Window.AttachEventHandler("OnScroll");            
        }

ここで、イベントを呼び出してコードを進めます。

private void windowEvents_OnScroll()
{
int nPos = GetScrollPos(webCompareSQL.Handle, (int)ScrollBarType.SbVert); 
nPos <<= 16;
uint wParam = (uint)ScrollBarCommands.SB_THUMBPOSITION | (uint)nPos;
SendMessage(WebPrevSQL.Handle, (int)Message.WM_VSCROLL, new IntPtr(wParam), new IntPtr(0));        
}

このコードを見つけましたが、使い方がわかりません。そのイベント。

webCompareSQL.Document.Window.Scroll
4

2 に答える 2

3

これを次のように機能させることができました。この例では、両方の Web ブラウザー コントロールが同じ URL に移動していると想定しています。垂直スクロールバーに加えて水平スクロールバーも同期しています - 必要ない場合は省略できます。

webBrowser1.DocumentCompleted
    += new WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted);
webBrowser2.DocumentCompleted
    += new WebBrowserDocumentCompletedEventHandler(webBrowser2_DocumentCompleted);

NavigateToPage("www.google.com");

....

private void NavigateToPage(string url)
{
    webBrowser1.Navigate(url);
    webBrowser2.Navigate(url);
}

private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
    webBrowser1.Document.Window.AttachEventHandler("onscroll", OnScrollEventHandler1);
}

private void webBrowser2_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
    webBrowser2.Document.Window.AttachEventHandler("onscroll", OnScrollEventHandler2);
}

public void OnScrollEventHandler1(object sender, EventArgs e)
{           
    webBrowser2.Document.GetElementsByTagName("HTML")[0].ScrollTop
        = webBrowser1.Document.GetElementsByTagName("HTML")[0].ScrollTop;
    webBrowser2.Document.GetElementsByTagName("HTML")[0].ScrollLeft
        = webBrowser1.Document.GetElementsByTagName("HTML")[0].ScrollLeft;
}

public void OnScrollEventHandler2(object sender, EventArgs e)
{
    webBrowser1.Document.GetElementsByTagName("HTML")[0].ScrollTop
        = webBrowser2.Document.GetElementsByTagName("HTML")[0].ScrollTop;
    webBrowser1.Document.GetElementsByTagName("HTML")[0].ScrollLeft
        = webBrowser2.Document.GetElementsByTagName("HTML")[0].ScrollLeft;
} 

この操作に関連するHow to retrieve the scrollbar position of the webbrowser control in .NET のコメントに注意してください

webBrowser1.Document.GetElementsByTagName("HTML")[0].ScrollTop

動作していません。これが私のマシンで確実に機能することを確認できます。そのため、このコードがあなたのマシンで機能しない場合は、別の方法を検討できます。

于 2012-10-15T09:47:29.920 に答える
2

実際のイベント名は「OnScroll」ではなく「onscroll」です。MSDN:http://msdn.microsoft.com/en-us/library/ie/ms536966(v=vs.85).aspx

次のコードは、イベントが発生したときにメソッドを起動しています。

 private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            webBrowser1.Document.Window.AttachEventHandler("onscroll", OnScrollEventHandler);
        }

        public void OnScrollEventHandler(object sender, EventArgs e)
        {

        }
于 2012-10-14T11:41:07.600 に答える