处理动态创建的控件?

时间:2017-06-06 11:24:00

标签: c#

我在c#中编写简单的Web浏览器。对于多标签功能,我添加了tabcontrol并将webbrowser1放入其中。我使用toolstripbutton动态添加tabpages,webbrowsers(并使用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)。我该如何解决这个问题?

提前致谢

1 个答案:

答案 0 :(得分: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的特定实例执行导航,而不是创建新的浏览器。我不知道你对密钥处理程序有什么其他代码,但是如果你只对enter执行一个动作,我会修改这个代码来检查它,并且只在我真正需要时才进行集合。像这样:

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