首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >重写webBrowser单击事件

重写webBrowser单击事件
EN

Stack Overflow用户
提问于 2012-03-21 19:52:30
回答 5查看 11.2K关注 0票数 3

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

我已经创建了一个包装方法,它包装了导航方法。我想要做的是,当用户单击链接、按钮或watever时,将调用我的方法而不是.Navigate()方法。

我需要做些什么才能做到这一点?

谢谢

编辑:看起来理解我的问题有些困难,让我试着改正:

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

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

EN

回答 5

Stack Overflow用户

发布于 2012-03-21 20:09:58

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

代码语言:javascript
运行
复制
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事件处理程序:

代码语言:javascript
运行
复制
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");        
}
票数 7
EN

Stack Overflow用户

发布于 2012-03-21 20:28:24

将引发导航事件。您可以为它实现一个事件处理程序,以拒绝并重定向导航请求:

代码语言:javascript
运行
复制
    private void webBrowser1_Navigating(object sender, WebBrowserNavigatingEventArgs e) {
        // Redirect expertsexchange to stackoverflow
        if (e.Url.ToString().Contains("experts-exchange")) {
           e.Cancel = true;
           webBrowser1.Navigate("http://stackoverflow.com");
        }
    }
票数 4
EN

Stack Overflow用户

发布于 2012-03-21 20:00:34

如果我没理解错的话,那你就走错路了。

只需查看超链接的HTML代码即可。如果这是一个简单的链接,那么它只需转到导航即可。如果有一些脚本函数调用,那么您可以看到该函数做了什么。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9804105

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档