我知道这已经在这里多次讨论了,但是在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控件中打开,这是我不想要的。
我怎样才能让它双向工作?
我希望这可以帮到你。
如果要在浏览器中打开链接,可以添加以下简单代码:
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的叠加流量帖
我希望这些信息可以帮到你一点点。
这是一个老帖子,但我相信我可能会理解原始海报想要做的事情。如果用户从下拉列表中选择了页面,则他们希望在webbrowser控件中加载页面,但是加载页面中的任何链接都应该在用户的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;
}
}
}