为OnScroll创建事件处理程序以进行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
真实事件名称是“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) { }
我能够如下工作。 此示例假定两个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; }
我注意到您在如何检索.NET中与此操作相关的Web浏览器控件的滚动条位置中的注释
webBrowser1.Document.GetElementsByTagName("HTML")[0].ScrollTop
不工作 我可以确认这绝对可以在我的机器上运行,所以如果这个代码对你不起作用,我可以研究替代方案。
- 禁用wpf窗口上的鼠标事件以及放置在其上的用户控件
- 如何使用linq2sql和OR运算符使用谓词构建器
- 将WrapPanel虚拟化为ListView的ItemsTemplate
- 如何让Dapper将.net日期时间映射到datetime2?
- 使用平移和缩放计算正确的光标位置
- 有没有其他方法可以在没有任何第三方/库的情况下使用C#中的WPF处理DICOM图像?
- 如何在Protobuf中发送多种类型的对象?
- 无法将System.Data.Entity.Core.Objects.ObjectResult类型隐式转换为System.Data.Objects.ObjectResult
- C#:将用户定义的类型传递给Oracle存储过程