2017-06-06 136 views
-1

我在c#中編寫簡單的web瀏覽器。對於多選項卡功能,我添加了tabcontrol並將webbrowser1放入其中。我用toolstripbutton動態添加的TabPages,化網頁瀏覽器(和處理與webbrowser1事件事件):處理動態創建的控件?

 TabPage tabpage = new TabPage(); 
     tabControl1.Controls.Add(tabpage); 
     WebBrowser webbrowser = new WebBrowser(); 
     webbrowser.Parent = tabpage; 
     webbrowser.Dock = DockStyle.Fill; 
     webbrowser.Navigate("www.google.com"); 
     webbrowser.DocumentTitleChanged += new EventHandler(webBrowser1_DocumentTitleChanged); 
     webbrowser.StatusTextChanged += new EventHandler(webBrowser1_StatusTextChanged); 
     webbrowser.ScriptErrorsSuppressed = true; 
     webbrowser.DocumentCompleted += new System.Windows.Forms.WebBrowserDocumentCompletedEventHandler(this.webBrowser1_DocumentCompleted); 
     webbrowser.Navigated += new System.Windows.Forms.WebBrowserNavigatedEventHandler(this.webBrowser1_Navigated); 
     webbrowser.Navigating += new System.Windows.Forms.WebBrowserNavigatingEventHandler(this.webBrowser1_Navigating); 
     webbrowser.ProgressChanged += new System.Windows.Forms.WebBrowserProgressChangedEventHandler(this.webBrowser1_ProgressChanged); 

我的問題是我不能妥善處理它們,因爲我寫了webbrowser1代碼和不知道如何調用動態創建的對象。我寫這個:

private void toolStripTextBox1_KeyDown(object sender, KeyEventArgs e) 
    { 
     foreach (Control c in tabControl1.SelectedTab.Controls) 
     { 
      if (e.GetType() == typeof(WebBrowser)) 
      { 
       WebBrowser web = new WebBrowser(); 
       if (e.KeyCode == Keys.Enter) 
        web.Navigate(toolStripTextBox1.Text); 
      } 
     } 

    } 

但它根本不工作(即使對webbrowser1)。我應該如何解決這個問題?

在此先感謝

+0

e是永遠等於輸入web瀏覽器它是一個事件,也是否是您創建的web瀏覽器的一個新實例,而不是創建事件處理器所給出的類型的實例。 –

+0

也許你打算做'sender.GetType()'? '如果(發件人是WebBrowser)'會更好。 –

+0

您還在您的事件處理程序中創建了一個新的WebBrowser對象,然後在新的WebBrowser中顯示該頁面,而不是使用您已經在選項卡中加載的頁面,以便您導航到的頁面不會顯示用戶。您還爲每個按鍵創建了「WebBrowser」,並將其中的大部分放在地板上以便稍後清理。 – pstrjds

回答

0

我想你是打算做這樣的事情:

private void toolStripTextBox1_KeyDown(object sender, KeyEventArgs e) 
{ 
    foreach (Control c in tabControl1.SelectedTab.Controls) 
    { 
     var web = c as WebBrowser; 
     if (c != null && e.KeyCode == Keys.Enter) 
     { 
      web.Navigate(toolStripTextBox1.Text); 
     } 
    } 
} 

您通過控制您TabControl循環,你需要找到一個是WebBrowser。一旦你擁有了這個控制權,那麼你就需要執行一個WebBrowser這個特定實例的導航,而不是創建一個新的瀏覽器。我不知道你對密鑰處理程序有什麼其他代碼,但是如果你只是在輸入時執行一個操作,我會修改此代碼以便首先檢查該代碼,並在實際需要時僅對該集合進行操作。就像這樣:

private void toolStripTextBox1_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode != Keys.Enter) return; 

    foreach (Control c in tabControl1.SelectedTab.Controls) 
    { 
     var web = c as WebBrowser; 
     if (c != null) 
     { 
      web.Navigate(toolStripTextBox1.Text); 
     } 
    } 
}