链接单击覆盖webBrowser控件

时间:2018-04-13 17:54:04

标签: c# webbrowser-control

我在C#(.Net 4.5)中使用Virtual Studio Community。 我有一个简单的表单,其中包含一个按钮和一个webBrowser控件。 当我点击按钮时,我将webBrowser导航到google.com。 然后,当页面加载时,我尝试覆盖linkClick事件,就像我在之前在此站点(stackoverflow)上阅读的解决方案中看到的那样。 但是,当我点击加载页面上的链接时,它表示导航已取消,但无论如何都会导航。 我做错了什么?

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        webBrowser1.Navigate("http://www.google.com/");
    }

    private bool bCancel = false;

    private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
    {
        for (int i = 0; i < webBrowser1.Document.Links.Count; i++)
        {
            webBrowser1.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 webBrowser1_Navigating(object sender, WebBrowserNavigatingEventArgs e)
    {
        if (bCancel == true)
        {
            e.Cancel = true;
            bCancel = false;
        }
    }
}

1 个答案:

答案 0 :(得分:0)

您需要将Form1事件绑定到您编写的处理程序;让处理程序的名称与控件下划线事件名称相匹配是不够的。

所以你可以在public Form1() { InitializeComponent(); webBrowser1.Navigating += new WebBrowserNavigatingEventHandler(webBrowser1_Navigating); } 的构造函数中执行此操作:

Load

更好的是,添加{{1}}事件并在那里执行相同操作。查看主题的official documentation