如何在运行表单应用程序中动态更改WebBrowser对象



我正在构建一个在运行时预订网页的应用程序。然后,如果用户执行一些操作(例如,单击按钮(,程序在面板中显示的预加载网页显示。

为了实现这一目标,我在Form中定义了WebBrowser对象。此WebBrowser称为webBrowser1。在Form的构造函数中,我每按钮创建一个WebBrowser对象(wb1wb2wb3(。然后,我使用每个对象上的方法Navigate预加载网页。在OnClick处理程序中,我将 webBrowser1重新定为构造函数中创建的对象之一。

问题是我无法在重新分配后可视化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://stackoverflow.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"网页?

我不知道描述这一点的确切技术术语,但是我要寻找的效果等同于Web浏览器中的选项卡。例如,假设我正在使用Mozilla Firefox浏览网络,我打开了三个选项卡。第一个选项卡已加载Google主页,第二个标签具有Stackoverflow主页和第三个Wikipedia。当我切换选项卡时,没有重新加载网页(甚至不是从缓存中(,它只会将任何网页加载到前景中。

正如问题注释中指出的那样,我必须管理表单的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://stackoverflow.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);
    }
}

最新更新