【问题标题】:Create event handler for OnScroll for web browser control为 Web 浏览器控件创建 OnScroll 事件处理程序
【发布时间】:2012-06-20 07:49:03
【问题描述】:

有没有人成功地将鼠标滚动事件捕获到网络浏览器组件中?

我想同时滚动两个网络浏览器控件。

但是网络浏览器没有滚动事件。

我想在下面创建一个类似这样的活动?有人做过或见过吗?

 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

【问题讨论】:

    标签: c# events event-handling scroll


    【解决方案1】:

    我能够让这个工作如下。此示例假定两个 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
    

    不工作。我可以确认这绝对适用于我的机器,因此如果此代码在您的机器上不起作用,我可以寻找替代方案。

    【讨论】:

      【解决方案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)
              {
      
              }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-12-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-06
        • 1970-01-01
        相关资源
        最近更新 更多