-2

我有一个简单的 C# 应用程序,其中包含按钮和 Web 浏览器,每个按钮执行一个请求并在 Web 浏览器上显示请求的结果。我在下一个按钮中使用请求的结果。

private void button1_Click(object sender, EventArgs e)
        {
webBrowser1.Navigate("http://www.test.com");
        }

private void button2_Click(object sender, EventArgs e)
        {
            if (webBrowser1.Document.GetElementById("tesxtbox1") != null)
            {
            HtmlElement txt1 = webBrowser1.Document.GetElementById("tesxtbox1");
            txt1.SetAttribute("value", "test");
            webBrowser1.Document.Forms[0].InvokeMember("submit");
            }
        }

我的问题是找到通过单击执行两个按钮的方法或方式,但是第二个按钮在加载 Web 浏览器之前不要执行。在我的第一个解决方案中,我在第一个按钮中添加了:

webBrowser1.DocumentCompleted + = new WebBrowserDocumentCompletedEventHandler (Button2_Click);

但是第二个按钮执行了几次,所以我在按钮2的最后一行添加了:

webBrowser1.DocumentCompleted - = new WebBrowserDocumentCompletedEventHandler (Button2_Click);

它有效,但在控制台中我发现 Button 2 执行了两次

提前致谢!

4

2 回答 2

2

你以错误的方式处理这个问题。首先,您不是在寻找单击两个按钮的方法。您正在寻找一种方法来单击一个按钮并在满足条件时执行操作。

基本上你只需要调用button2.PerformClick()你的 WebBrowserDocumentCompleted方法。但是,如果您想确保 button1 被点击,您可以在 button1 Click 方法中设置一个 bool 并在 button2 Click 方法中重置它。

如果您需要在第一次单击按钮后在文档完成方法中执行多个按钮单击,则可以将它们添加到您的DocumentCompleted方法中,如下所示:

先正常订阅。

webBrowser1.DocumentCompleted += Document_Completed;

TAB通常,您可以在订阅事件后通过按来生成方法存根。该方法可以如下:

private void Document_Completed(object sender, WebBrowserDocumentCompletedEventArgs e)
{
     //here you add the other buttons that must be clicked when document complete
     button1.PerformClick(); button2.PerformClick();//etc
     //you could even iterate all over the buttons on the form and click each of them if it meets a certain condtition.
}

我希望能回答你的问题:)

于 2013-02-21T12:00:27.573 回答
0

每次 WebBrowser 控件完成下载文档时都会执行 DocumentCompleted。

您只需订阅一次。

于 2013-02-21T11:36:17.747 回答