我知道这已经在这里多次讨论过,但是打开链接的默认行为 单击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控件中打开,这是我不想要的。
我怎样才能让它双向工作?
答案 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;
}
}
}