覆盖webBrowser单击事件

The*_*per 3 c# winforms

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

我创建了一个包装导航方法的包装器方法.我想要做的是,当用户点击链接或按钮或watever时,我的方法被调用而不是.Navigate()方法.

我需要什么来实现这一目标?

谢谢

编辑:似乎在理解我的问题时遇到了一些麻烦,让我试着重新思考:

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

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

Rei*_*ldo 6

无需覆盖,只需将事件处理程序附加到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;
  }
}
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你!

编辑:

如果您想要查找有关所单击链接的更多信息,只需使用以下内容修改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");        
}
Run Code Online (Sandbox Code Playgroud)


Han*_*ant 5

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

    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");
        }
    }
Run Code Online (Sandbox Code Playgroud)