为Web浏览器控件创建OnScroll事件处理程序

5

有没有人成功地捕捉到Web浏览器组件中的鼠标滚动事件?

我有两个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
2个回答

4
我能够像下面这样使其工作起来。该示例假设两个网络浏览器控件正在导航到相同的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;
} 

我注意到你在如何在.NET中检索webbrowser控件的滚动条位置的评论中提到了这个操作。

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

不起作用。我可以确认这段代码在我的电脑上确实有效,所以如果这段代码在你的电脑上不起作用,我可以寻找替代方案。


2

真正的事件名是"onscroll"而不是"OnScroll"。

下面的代码在事件发生时触发该方法。

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

        public void OnScrollEventHandler(object sender, EventArgs e)
        {

        }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接