c# - 覆盖 webBrowser 点击事件

标签 c# winforms

我需要一些有关当用户单击 webBrowser 控件中的超链接时发生的情况的信息。我的想法是它调用了 .Navigate() 方法,但我不确定。

我创建了一个封装导航方法的封装方法。我想要做的是,当用户单击链接、按钮或其他任何内容时,将调用我的方法而不是 .Navigate() 方法。

我需要 ovverride 什么来实现这个?

谢谢

编辑:看来理解我的问题有些困难,让我试着重新解释一下:

我已经创建了我自己的继承自 WebBrowser 的 webBrowser 控件。在我的控件中,有一个我用来导航的方法,它在实际调用 navigate() 方法之前执行一些步骤。

现在从我的代码中调用这个方法很容易,只需调用我的方法而不是 .Navigate。但我想要的是,当用户单击页面上的链接时,我的方法将运行,而不是 .Navigate。

最佳答案

无需覆盖,只需将事件处理程序附加到 WebBrowser.DocumentCompleted 事件页面上的每个链接。

private bool bCancel = false;

private void webBrowser_DocumentCompleted(object sender,
                                 WebBrowserDocumentCompletedEventArgs e)
{
  int i;
  for (i = 0; i < webBrowser.Document.Links.Count; i++)
  {
     webBrowser.Document.Links[i].Click += new    
                            HtmlElementEventHandler(this.LinkClick);
  }
}
private void LinkClick(object sender, System.EventArgs e)
{
  bCancel = true;
  MessageBox.Show("Link Was Clicked Navigation was Cancelled");
}
private void webBrowser_Navingating(object sender, 
                                WebBrowserNavigatingEventArgs e )
{
  if (bCancel == true)
  {
     e.Cancel=true;
     bCancel = false;
  }
}

希望对您有所帮助!

编辑:

如果您想查找有关被单击链接的更多信息,只需使用如下内容修改 LinkClick 事件处理程序:

private void LinkClick(object sender, System.EventArgs e)
{
    HtmlElement element = ((HtmlElement)sender);
    string id = element.Id;
    string href = element.GetAttribute("href");

    bCancel = true;
    MessageBox.Show("Link Was Clicked Navigation was Cancelled");        
}

关于c# - 覆盖 webBrowser 点击事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9804105/

相关文章:

c# - 检索准确日期的最佳方法?

vb.net - 如何在运行时更改列表框中的选定项文本?

c# - protobuf-csharp-端口

c# - c#和asp.net有什么关系?

c# - 更改我的服务器端 WebAPI 以获得异步/等待的好处

C# - 表单构造函数中的代码未执行

winforms - MVP 主持人之间的沟通?

c# - 尝试插入我的数据失败

c# - Owin Authentication.SignIn 不工作

c# - 如何将 bool 值转换为本地化字符串