簡體   English   中英

如何在正在運行的Forms應用程序中動態更改WebBrowser對象?

[英]How can I change a WebBrowser object dynamically in a running Forms application?

我正在構建一個可在運行時預加載網頁的應用。 然后,如果用戶執行了某些操作(例如,單擊按鈕),程序將在面板中顯示預加載的網頁。

為了實現這一點,我在Form定義了一個WebBrowser對象。 WebBrowser稱為webBrowser1 Form的構造函數中,每個按鈕( wb1wb2wb3 )創建一個WebBrowser對象。 然后,我在每個對象上使用Navigate方法來預加載網頁。 在onClick處理程序中,我將webBrowser1重新分配給在構造函數中創建的對象之一。

問題是重新分配后我無法看到WebBrowser

這是實現Form的類:

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: “預加載”網頁是什么意思?

我不知道確切的技術術語來描述這一點,但是我正在尋找的效果等同於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);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM