2012-06-20 3 views
2

Неужели кто-то успешно захватил событие прокрутки мыши в компоненте веб-браузера?Создать обработчик событий для OnScroll для управления веб-браузером

У меня есть два элемента управления веб-браузером, которые я бы хотел прокрутить одновременно.

Но для веб-браузеров нет событий прокрутки.

Я хотел бы создать мероприятие, подобное этому ниже? кто-нибудь сделал или видел это раньше?

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 

ответ

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) 
     { 

     } 
1

Я был в состоянии заставить это работать следующим образом. В этом примере предполагается, что оба элемента управления веб-браузером перемещаются к одному и тому же адресу. Я также синхронизирую горизонтальную полосу прокрутки в дополнение к вертикали - это можно опустить, если это не требуется.

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 

не работает. Я могу подтвердить, что это определенно работает на моей машине, поэтому, если этот код не работает на вас, я могу изучить альтернативы.

Смежные вопросы