为OnScroll创建事件处理程序以进行Web浏览器控制

时间:2012-06-20 07:49:04

标签: c# events event-handling scroll

是否有人成功地将鼠标滚动事件困在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 个答案:

答案 0 :(得分:2)

我能够按照以下方式工作。此示例假定两个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

不工作。我可以确认这肯定适用于我的机器,所以如果这个代码对你的代码不起作用,我可以研究替代方案。

答案 1 :(得分:1)

真实事件名称是“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)
        {

        }