2017-06-06 3 views
-1

Ich schreibe einfachen Webbrowser in C#. Für die Multi Tab Funktionalität habe ich tabcontrol hinzugefügt und webbrowser1 darin platziert. Ich benutze Toolstripbutton dynamisch TabPages hinzufügen, Webbrowsern (und behandeln ihre Veranstaltungen mit WebBrowser1 Veranstaltungen):Handhabung dynamisch erstellter Kontrolle?

 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); 

mein Problem ist, ich sie richtig behandeln kann nicht, weil ich Code für WebBrowser1 geschrieben und weiß nicht, wie Objekt dynamisch erstellt nennen. Ich schrieb dies:

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); 
      } 
     } 

    } 

aber es funktioniert überhaupt nicht (sogar für webbrowser1). Wie soll ich das beheben?

Vielen Dank im Voraus

+0

e nie gleich WebBrowser geben ist es ein Ereignis, auch wenn es eine neue Instanz des Web-Browsers erstellen, anstatt eine Instanz des Typs durch den Event-Handler gegeben. –

+0

Vielleicht wollten Sie 'sender.GetType()' tun? 'if (sender ist WebBrowser)' wäre noch besser. –

+0

Sie erstellen auch ein neues "WebBrowser" -Objekt in Ihrem Event-Handler und zeigen dann die Seite in diesem neuen 'WebBrowser' an, anstatt den bereits in Ihrem Tab geladenen zu verwenden, damit die Seite, zu der Sie navigieren, nicht angezeigt wird Benutzer. Sie erstellen auch den 'WebBrowser' für jeden Tastendruck und lassen die meisten davon auf dem Boden fallen, um später bereinigt zu werden. – pstrjds

Antwort

0

Ich glaube, Sie beabsichtigen, so etwas zu tun:

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); 
     } 
    } 
} 

Sie sind durch die Steuerelemente in Ihrem TabControl Looping, müssen Sie finden, die ein WebBrowser ist. Sobald Sie dieses Steuerelement haben, möchten Sie die Navigation mit dieser bestimmten Instanz eines WebBrowser durchführen, anstatt einen neuen Browser zu erstellen. Ich weiß nicht, welchen anderen Code du für den Key-Handler hast, aber wenn du nur eine Aktion bei Enter ausführst, würde ich diesen Code überarbeiten, um zuerst nach dem Code zu suchen und die Sammlung nur dann zu durchlaufen, wenn ich es wirklich brauche. Wie folgt aus:

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); 
     } 
    } 
} 
Verwandte Themen