如何在 运行 Forms 应用程序中动态更改 WebBrowser 对象?
How can I change a WebBrowser object dynamically in a running Forms application?
我正在构建一个应用程序,它可以在 运行 时预加载网页。然后,如果用户执行某些操作(例如单击按钮),程序会在面板中显示预加载的网页。
为了实现这一点,我在Form
中定义了一个WebBrowser
对象。这个WebBrowser
就叫做webBrowser1
。在 Form
的构造函数中,我为每个按钮创建了一个 WebBrowser
对象(wb1
、wb2
和 wb3
)。然后,我在每个对象上使用 Navigate
方法来预加载网页。在 onClick 处理程序中,我将 webBrowser1
重新分配给在构造函数中创建的对象之一。
问题是重新分配后我无法看到 WebBrowser
。
这是实现表单的class:
public partial class Form1 : Form
{
private WebBrowser wb1;
private WebBrowser wb2;
private WebBrowser wb3;
public Form1()
{
wb1 = new WebBrowser();
wb1.Navigate("https://www.google.com/");
wb2 = new WebBrowser();
wb2.Navigate("https://whosebug.com/");
wb3 = new WebBrowser();
wb3.Navigate("https://en.wikipedia.org/wiki/Main_Page");
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
webBrowser1 = wb1;
}
private void button2_Click(object sender, EventArgs e)
{
webBrowser1 = wb2;
}
private void button3_Click(object sender, EventArgs e)
{
webBrowser1 = wb3;
}
}
我做错了什么?
编辑 1: "preload" 网页是什么意思?
我不知道描述这个的确切技术术语,但我正在寻找的效果相当于网络浏览器中的选项卡。例如,假设我正在使用 Mozilla Firefox 浏览网页,并且打开了三个选项卡。第一个选项卡加载了 Google 主页,第二个选项卡加载了 Whosebug 主页,第三个选项卡加载了维基百科。当我切换选项卡时,不会重新加载网页(甚至不会从缓存中重新加载),它只会将选项卡中加载的任何网页带到前台。
正如问题评论中指出的那样,我必须管理表单的 Controls
集合。我还在构造函数中复制了一些 visual studio 生成的代码,使所有 WebBrowser
对象具有相同的显示功能。我不确定最后一点是否必要。
代码如下:
public partial class Form1 : Form
{
private WebBrowser wb1;
private WebBrowser wb2;
private WebBrowser wb3;
public Form1()
{
wb1 = new WebBrowser();
wb1.Navigate("https://www.google.com/");
wb2 = new WebBrowser();
wb2.Navigate("https://whosebug.com/");
wb3 = new WebBrowser();
wb3.Navigate("https://en.wikipedia.org/wiki/Main_Page");
List<WebBrowser> lwb = new List<WebBrowser>();
lwb.Add(wb1);
lwb.Add(wb2);
lwb.Add(wb3);
foreach (WebBrowser wb in lwb)
{
wb.Dock = System.Windows.Forms.DockStyle.Fill;
wb.Location = new System.Drawing.Point(0, 0);
wb.MinimumSize = new System.Drawing.Size(20, 20);
wb.Name = "webBrowser1";
wb.Size = new System.Drawing.Size(260, 208);
wb.TabIndex = 0;
}
InitializeComponent();
}
private void bringToFront(WebBrowser wb)
{
this.panel1.Controls.Remove(this.webBrowser1);
this.webBrowser1 = wb;
this.panel1.Controls.Add(this.webBrowser1);
}
private void button1_Click(object sender, EventArgs e)
{
bringToFront(wb1);
}
private void button2_Click(object sender, EventArgs e)
{
bringToFront(wb2);
}
private void button3_Click(object sender, EventArgs e)
{
bringToFront(wb3);
}
}
我正在构建一个应用程序,它可以在 运行 时预加载网页。然后,如果用户执行某些操作(例如单击按钮),程序会在面板中显示预加载的网页。
为了实现这一点,我在Form
中定义了一个WebBrowser
对象。这个WebBrowser
就叫做webBrowser1
。在 Form
的构造函数中,我为每个按钮创建了一个 WebBrowser
对象(wb1
、wb2
和 wb3
)。然后,我在每个对象上使用 Navigate
方法来预加载网页。在 onClick 处理程序中,我将 webBrowser1
重新分配给在构造函数中创建的对象之一。
问题是重新分配后我无法看到 WebBrowser
。
这是实现表单的class:
public partial class Form1 : Form
{
private WebBrowser wb1;
private WebBrowser wb2;
private WebBrowser wb3;
public Form1()
{
wb1 = new WebBrowser();
wb1.Navigate("https://www.google.com/");
wb2 = new WebBrowser();
wb2.Navigate("https://whosebug.com/");
wb3 = new WebBrowser();
wb3.Navigate("https://en.wikipedia.org/wiki/Main_Page");
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
webBrowser1 = wb1;
}
private void button2_Click(object sender, EventArgs e)
{
webBrowser1 = wb2;
}
private void button3_Click(object sender, EventArgs e)
{
webBrowser1 = wb3;
}
}
我做错了什么?
编辑 1: "preload" 网页是什么意思?
我不知道描述这个的确切技术术语,但我正在寻找的效果相当于网络浏览器中的选项卡。例如,假设我正在使用 Mozilla Firefox 浏览网页,并且打开了三个选项卡。第一个选项卡加载了 Google 主页,第二个选项卡加载了 Whosebug 主页,第三个选项卡加载了维基百科。当我切换选项卡时,不会重新加载网页(甚至不会从缓存中重新加载),它只会将选项卡中加载的任何网页带到前台。
正如问题评论中指出的那样,我必须管理表单的 Controls
集合。我还在构造函数中复制了一些 visual studio 生成的代码,使所有 WebBrowser
对象具有相同的显示功能。我不确定最后一点是否必要。
代码如下:
public partial class Form1 : Form
{
private WebBrowser wb1;
private WebBrowser wb2;
private WebBrowser wb3;
public Form1()
{
wb1 = new WebBrowser();
wb1.Navigate("https://www.google.com/");
wb2 = new WebBrowser();
wb2.Navigate("https://whosebug.com/");
wb3 = new WebBrowser();
wb3.Navigate("https://en.wikipedia.org/wiki/Main_Page");
List<WebBrowser> lwb = new List<WebBrowser>();
lwb.Add(wb1);
lwb.Add(wb2);
lwb.Add(wb3);
foreach (WebBrowser wb in lwb)
{
wb.Dock = System.Windows.Forms.DockStyle.Fill;
wb.Location = new System.Drawing.Point(0, 0);
wb.MinimumSize = new System.Drawing.Size(20, 20);
wb.Name = "webBrowser1";
wb.Size = new System.Drawing.Size(260, 208);
wb.TabIndex = 0;
}
InitializeComponent();
}
private void bringToFront(WebBrowser wb)
{
this.panel1.Controls.Remove(this.webBrowser1);
this.webBrowser1 = wb;
this.panel1.Controls.Add(this.webBrowser1);
}
private void button1_Click(object sender, EventArgs e)
{
bringToFront(wb1);
}
private void button2_Click(object sender, EventArgs e)
{
bringToFront(wb2);
}
private void button3_Click(object sender, EventArgs e)
{
bringToFront(wb3);
}
}