以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  右键获取控件坐标无果  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=91020)

--  作者:ztmdnzc
--  发布时间:2016/9/27 20:20:00
--  右键获取控件坐标无果

c# winform WebBrower 控件中右键获取控件坐标
加载页面以后,鼠标右键时候,自动生成事件 (加载右键事件)获取坐标和链接
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            webBrowser1.Document.MouseDown += new HtmlElementEventHandler(Document_MouseDown);
        }

        void Document_MouseDown(object sender, HtmlElementEventArgs e)
        {
            if (e.MouseButtonsPressed == MouseButtons.Right)
            {
                Console.WriteLine(e.MousePosition);
            }
            else if (e.MouseButtonsPressed == MouseButtons.Left)
            {

                HtmlElement ele = webBrowser1.Document.GetElementFromPoint(e.MousePosition);
                if (ele!= null)
                {
                    Console.WriteLine(ele.GetAttribute("href"));
                }
            }
        }

 

1.把上述代码转成如下代码后,测试无反映

\'\'\'\'获取鼠标事件
\'Public Sub Document_MouseDown(ByVal sender As System.Object, ByVal e As Document.HtmlElementEventArgs)
Public Sub web_Document_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.HtmlElementEventArgs)

Dim webm As System.Windows.Forms.WebBrowser = sender \'把触发该事件的Sender转换为WebBrowser
If e.MouseButtonsPressed = MouseButtons.Right Then \'如果按键是右键
\'Console.WriteLine(e.MousePosition)
MessageBox.Show(e.MousePosition.x,e.MousePosition.y)
\'Else If e.MouseButtonsPressed <> MouseButtons.Left \'\'如果按键不是左键
If webm.Document.GetElementFromPoint(e.MousePosition) IsNot Nothing Then \'如果该点位内容不为空
MessageBox.Show((webm.Document.GetElementFromPoint(e.MousePosition)).GetAttribute("href")) \'显示网址
\'Console.WriteLine(webm.Document.GetElementFromPoint(e.MousePosition).GetAttribute("href")
End If
End If
End Sub

2.在窗口afterload事件中设置如下代码时总提示web_Document_MouseDown未声明

AddHandler web.Document.MouseDown,addressof web_Document_MouseDown \'鼠标事件

麻烦老师看看毛病处在哪里?谢谢!


--  作者:有点蓝
--  发布时间:2016/9/27 20:27:00
--  
以下代码放到全局代码中

Public Sub web_Document_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.HtmlElementEventArgs)
Dim webm As System.Windows.Forms.WebBrowser = sender \'把触发该事件的Sender转换为WebBrowser
If e.MouseButtonsPressed = MouseButtons.Right Then \'如果按键是右键
    \'Console.WriteLine(e.MousePosition)
    MessageBox.Show(e.MousePosition.x,e.MousePosition.y)
    \'Else If e.MouseButtonsPressed <> MouseButtons.Left \'\'如果按键不是左键
    If webm.Document.GetElementFromPoint(e.MousePosition) IsNot Nothing Then \'如果该点位内容不为空
        MessageBox.Show((webm.Document.GetElementFromPoint(e.MousePosition)).GetAttribute("href")) \'显示网址
        \'Console.WriteLine(webm.Document.GetElementFromPoint(e.MousePosition).GetAttribute("href")
    End If
End If

--  作者:ztmdnzc
--  发布时间:2016/9/27 21:44:00
--  
蓝老师:就是放到全局代码不起作用,且出现2的问题,才发帖请教的。
--  作者:有点蓝
--  发布时间:2016/9/27 22:03:00
--  
汗,到vs看了一下,WebBrower 控件没有Document.MouseDown事件。这个应该是别人自己继承扩展的
--  作者:ztmdnzc
--  发布时间:2016/9/27 22:12:00
--  
蓝老师有没有其他方法可以实现上述功能呢?
--  作者:有点蓝
--  发布时间:2016/9/27 22:37:00
--  
我错了,可以的
全局代码
Public Sub WebBrowser1_DocumentCompleted(ByVal sender As Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs)
Dim Doc As System.Windows.Forms.HtmlDocument = sender.Document

AddHandler Doc.MouseDown, AddressOf Document_MouseDown
End Sub

Public Sub Document_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.HtmlElementEventArgs)
Dim doc As System.Windows.Forms.HtmlDocument = sender \'把触发该事件的Sender转换为WebBrowser
If e.MouseButtonsPressed = MouseButtons.Right Then \'如果按键是右键
    \'Console.WriteLine(e.MousePosition)
    MessageBox.Show(e.MousePosition.x,e.MousePosition.y)
    \'Else If e.MouseButtonsPressed <> MouseButtons.Left \'\'如果按键不是左键
    If Doc.GetElementFromPoint(e.MousePosition) IsNot Nothing Then \'如果该点位内容不为空
        MessageBox.Show((Doc.GetElementFromPoint(e.MousePosition)).GetAttribute("href")) \'显示网址
        \'Console.WriteLine(webm.Document.GetElementFromPoint(e.MousePosition).GetAttribute("href")
    End If
End If
End Sub

窗口afterload
Dim web As System.Windows.Forms.WebBrowser = e.Form.Controls("WebBrowser1").basecontrol
AddHandler web.DocumentCompleted, AddressOf WebBrowser1_DocumentCompleted

[此贴子已经被作者于2016/9/27 22:44:25编辑过]

--  作者:ztmdnzc
--  发布时间:2016/9/28 19:17:00
--  
谢谢蓝老师百忙之中解答。
--  作者:ztmdnzc
--  发布时间:2016/9/29 19:50:00
--  
蓝老师:再请教个问题,如果点击左键,不打开网址,代码该怎么设置?我用e.cancel=true出错,提示cancel不是htmlelement成员。
--  作者:有点蓝
--  发布时间:2016/9/29 21:13:00
--  
只能禁止打开新窗口

全局代码
Public cancelBrowse As Boolean

Public Sub WebBrowser1_Navigating(ByVal sender As System.Object, ByVal e As System.Windows.Forms.WebBrowserNavigatingEventArgs)
e.Cancel = cancelBrowse
End Sub

Public Sub WebBrowser1_NewWindow(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs)
e.Cancel = cancelBrowse
End Sub

窗口afterlaod

Dim web As System.Windows.Forms.WebBrowser = e.Form.Controls("WebBrowser1").basecontrol

AddHandler web.Navigating, AddressOf WebBrowser1_Navigating

AddHandler web.NewWindow, AddressOf WebBrowser1_NewWindow

cancelBrowse = True