C#Winforms WebBrowser在默认浏览器中打开链接

时间:2014-08-07 15:05:59

标签: c# winforms webbrowser-control

我知道这已经在这里多次讨论过,但是打开链接的默认行为 单击WebBrowser控件对我的应用程序不起作用。

因此,虽然这样可以打开在IE中点击的链接:

private void webBrowser1_Navigating(object sender, WebBrowserNavigatingEventArgs e)
{
    System.Diagnostics.Process.Start(e.Url.ToString());

    e.Cancel = true;
}

我使用下拉列表来更新webBrowser正在显示的html文件,如下所示:

private void ddl_SelectedIndexChanged(object sender, EventArgs e)
{
   webBrowser1.Url = myURI;  
}

现在我遇到的问题是,使用上面的_Navigating方法,webBrowser不会加载对URL的任何后续更改(感谢e.cancel我猜)所以它只显示第一个html文件负荷。

如果我删除了_Navigating方法,它会更新,但是链接会在同一个webBrowser控件中打开,这是我不想要的。

我怎样才能让它双向工作?

2 个答案:

答案 0 :(得分:5)

我希望这可以帮到你。

如果要在浏览器中打开链接,可以添加以下简单代码:

Process.Start("http://google.com");

请记住,有很多关于它的信息。在Stack Overflow中,您可以看一下这篇文章:How to open in default browser in C#


如果您想在其他浏览器中打开链接,可以使用以下代码:

System.Diagnostics.Process.Start("firefox.exe", "http://www.google.com");

请勿忘记访问此帖子:How do I open alternative webbrowser (Mozilla or Firefox) and show the specific url?


最后,我可以推荐你这个名为.NET C#: WebBrowser control Navigate() does not load targeted URL

的叠加流量帖子

我希望这些信息对您有所帮助。

答案 1 :(得分:0)

这是一篇过时的文章,但我相信我可以理解原始海报想要做的事情。如果用户从下拉列表中选择页面,他们希望将页面加载到Web浏览器控件中,但是加载的页面中的所有链接都应在用户的Web浏览器中打开。如果确实如此,则原始张贴者需要在表单上标记以确定行为。

原始海报只需要一个标志,例如下面显示的linksOpenInSystemBrowser。

using System;
using System.Windows.Forms;

namespace Browser_Test
{
    public partial class myForm : Form
    {
        private bool linksOpenInSystemBrowser = false;

        public myForm()
        {
            InitializeComponent();
        }

        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            linksOpenInSystemBrowser = false;
            webBrowser1.Navigate(comboBox1.SelectedItem.ToString());
        }

        private void webBrowser1_Navigating(object sender, WebBrowserNavigatingEventArgs e)
        {
            if(!linksOpenInSystemBrowser)
            {
                linksOpenInSystemBrowser = true;
                return;
            }

            System.Diagnostics.Process.Start(e.Url.ToString());

            e.Cancel = true;
        }
    }
}