[英]How can I communicate between a windows forms application and a WebBrowser control
[英]How can I change a WebBrowser object dynamically in a running Forms application?
我正在構建一個可在運行時預加載網頁的應用。 然后,如果用戶執行了某些操作(例如,單擊按鈕),程序將在面板中顯示預加載的網頁。
為了實現這一點,我在Form
定義了一個WebBrowser
對象。 該WebBrowser
稱為webBrowser1
。 在Form
的構造函數中,每個按鈕( wb1
, wb2
和wb3
)創建一個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.