通过指定容器来访问控件?

时间:2018-01-24 00:07:38

标签: c# winforms webbrowser-control

我的WinForms程序使用WebBrowser控件,只要触发NewWindow事件,它就会在内部创建一个带有WebBrowser控件的新TabPage,使用以下代码:

private void WebBrowser1_NewWindow(object sender, System.ComponentModel.CancelEventArgs e)
    {//open new window in new browser tab
        string newUrl = browser.Document.ActiveElement.GetAttribute("href");
        string pageName = "Page " + (tabControl1.TabCount + 1).ToString();
        TabPage detailsTab = new TabPage(pageName);
        Button closeTab = new Button();

        closeTab.Anchor = (AnchorStyles.Top | AnchorStyles.Right);
        closeTab.Location = new Point(10, 10);
        closeTab.Text = "Close Tab";
        closeTab.Click += new EventHandler(btnCloseTab_Click);


        tabControl1.TabPages.Add(detailsTab);
        WebBrowser detailsBrowser = new WebBrowser();
        detailsBrowser.Dock = DockStyle.Fill;
        detailsBrowser.Navigate(newUrl);
        detailsTab.Controls.Add(detailsBrowser);
        detailsTab.Controls.Add(closeTab);
        closeTab.BringToFront();

        tabControl1.SelectedIndex = tabControl1.TabCount -1;


    }

因此,每次打开新的浏览器选项卡时,都会向该选项卡添加名为detailsBrowser的WebBrowser控件。问题是,如果我需要从该浏览器获取HTML元素,请使用以下内容:

HtmlElement saveButton = detailsBrowser.Document.GetElementsByTagName("input").GetElementsByName("save")[0];

我不知道将使用哪个detailsBrowser来提取该HtmlElement。

我尝试使用

tabControl1.SelectedTab.Controls["detailsBrowser"]

而不是仅按名称引用浏览器,但这不起作用,当我尝试从浏览器中获取HtmlElement时返回null。

当多个控件具有相同名称时,是否有人建议如何使用其容器指定控件?或者有没有办法为每个以编程方式生成的WebBrowser控件提供唯一的名称?

谢谢!

编辑:这是我尝试使用WebBrowser选择HTML元素的方法:

public void addNote(string noteText)
    {

        WebBrowser currentBrowser = (WebBrowser) tabControl1.SelectedTab.Controls["detailsBrowser"];

        HtmlElement showNotesButton = null;
        //var links = browser.Document.GetElementsByTagName("div");
        var links = currentBrowser.Document.GetElementsByTagName("div");
        foreach (HtmlElement link in links)
        {
            if (link.GetAttribute("className") == "user_info_link")
            {
                showNotesButton = link;
            }
        }
        //HtmlElement noteBox = browser.Document.GetElementById("remark");
        HtmlElement noteBox = currentBrowser.Document.GetElementById("remark");

        //HtmlElement submitNote = browser.Document.GetElementById("save_note");
        HtmlElement submitNote = currentBrowser.Document.GetElementById("save_note");

        showNotesButton.InvokeMember("click");
        noteBox.Focus();
        noteBox.InnerText = noteText;
        Thread.Sleep(50);
        submitNote.InvokeMember("click");
    }

0 个答案:

没有答案