基于C#的WinForms按钮点击实现新页面导航问题
解决WinForms点击按钮在新页面打开多个网址的问题
首先看你当前的代码,问题出在连续调用webBrowser1.Navigate()——每次调用这个方法都会让WebBrowser控件替换当前加载的页面,所以最后只有最后一个网址会被显示,而且完全没处理“新页面打开”的逻辑。下面给你几种不同的解决方案,根据你的需求选:
方案1:用系统默认浏览器打开每个网址(最推荐)
这种方式最简单,直接调用系统浏览器打开每个链接,每个网址会在新窗口或新标签页打开(取决于浏览器的设置),而且不用受WebBrowser旧IE内核的限制:
using System; using System.Collections.Generic; using System.Diagnostics; using System.Windows.Forms; namespace ffffffffffffgd { public partial class MainForm : Form { public MainForm() { InitializeComponent(); } void Button1Click(object sender, EventArgs e) { // 把要打开的网址存到列表里,方便遍历 var urls = new List<string> { "https://www.scifi.hu", "http://onlinepont-online.cc", "https://filmbolond-onlinefilm.net", "https://www.mafab.hu", "https://lichess.org/" }; foreach (var url in urls) { // 启动系统默认浏览器打开网址 Process.Start(new ProcessStartInfo(url) { UseShellExecute = true // 必须设置这个,确保用系统默认程序打开 }); } } } }
方案2:在WinForms里弹出新窗口加载每个网址
如果想在自己的应用内打开每个页面,每个网址对应一个新的窗体:
using System; using System.Collections.Generic; using System.Drawing; using System.Windows.Forms; namespace ffffffffffffgd { public partial class MainForm : Form { public MainForm() { InitializeComponent(); } void Button1Click(object sender, EventArgs e) { var urls = new List<string> { "https://www.scifi.hu", "http://onlinepont-online.cc", "https://filmbolond-onlinefilm.net", "https://www.mafab.hu", "https://lichess.org/" }; foreach (var url in urls) { // 创建新窗体 var browserWindow = new Form(); browserWindow.Size = new Size(800, 600); // 设置窗口大小 browserWindow.Text = new Uri(url).Host; // 用网址的主机名做窗口标题 // 创建WebBrowser控件并添加到新窗体 var webBrowser = new WebBrowser(); webBrowser.Dock = DockStyle.Fill; browserWindow.Controls.Add(webBrowser); // 加载网址并显示窗口 webBrowser.Navigate(url); browserWindow.Show(); } } } }
方案3:用标签页在同一个窗口内管理多个页面
如果希望所有页面都在主窗口内,像浏览器的标签页一样,可以添加一个TabControl控件(先在设计器里拖一个TabControl到MainForm,命名为tabControl1),然后用下面的代码:
using System; using System.Collections.Generic; using System.Windows.Forms; namespace ffffffffffffgd { public partial class MainForm : Form { public MainForm() { InitializeComponent(); } void Button1Click(object sender, EventArgs e) { var urls = new List<string> { "https://www.scifi.hu", "http://onlinepont-online.cc", "https://filmbolond-onlinefilm.net", "https://www.mafab.hu", "https://lichess.org/" }; foreach (var url in urls) { // 创建新标签页,用网址的主机名做标签标题 var tabPage = new TabPage(new Uri(url).Host); // 创建WebBrowser控件 var webBrowser = new WebBrowser(); webBrowser.Dock = DockStyle.Fill; webBrowser.Navigate(url); // 把WebBrowser添加到标签页,再把标签页添加到TabControl tabPage.Controls.Add(webBrowser); tabControl1.TabPages.Add(tabPage); } } } }
额外提醒
- 如果你用的是.NET Core/.NET 5及以上版本,使用
Process.Start时必须设置UseShellExecute = true,否则会报错。 - 原生的
WebBrowser控件基于旧版IE引擎,对现代网页的兼容性很差,如果需要更好的网页支持,可以考虑使用CefSharp等第三方浏览器控件。
内容的提问来源于stack exchange,提问作者MISI
相关产品推荐
相关产品推荐

