Quelqu’un at-il réussi à piéger l’événement de défilement de la souris dans un composant Web?
J’ai deux contrôles de navigateur Web que je voudrais faire défiler en même temps.
Mais il n’y a pas d’événements de défilement pour les navigateurs Web.
J’aimerais créer un événement de ce genre ci-dessous? est-ce que quelqu’un a déjà fait ou vu cela auparavant?
private void webCompareSQL_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { Document.Window.AttachEventHandler("OnScroll"); }
Ici, je voudrais appeler mon événement et procéder avec le code.
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)); }
J’ai trouvé ce code mais je ne sais pas comment l’utiliser. c’est un événement.
webCompareSQL.Document.Window.Scroll
Le nom réel de l’événement est “onscroll” et non “OnScroll”. MSDN: http: //msdn.microsoft.com/en-us/library/ie/ms536966 (v = vs.85) .aspx
Le code suivant déclenche la méthode lorsqu’un événement se produit.
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { webBrowser1.Document.Window.AttachEventHandler("onscroll", OnScrollEventHandler); } public void OnScrollEventHandler(object sender, EventArgs e) { }
J’ai pu obtenir cela fonctionne comme suit. Cet exemple suppose que les deux contrôles de navigateur Web accèdent à la même URL. Je synchronise également la barre de défilement horizontale en plus de la verticale – cette option peut être omise si cela n’est pas nécessaire.
webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted); webBrowser2.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser2_DocumentCompleted); NavigateToPage("www.google.com"); .... private void NavigateToPage(ssortingng 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; }
Je note votre commentaire dans Comment faire pour récupérer la position de la barre de défilement du contrôle WebBrowser dans .NET , relative à cette opération
webBrowser1.Document.GetElementsByTagName("HTML")[0].ScrollTop
ne fonctionne pas. Je peux confirmer que cela fonctionne définitivement sur ma machine. Par conséquent, si ce code ne fonctionne pas sur le vôtre, je peux rechercher des alternatives.