我有一个简单的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);
它可以工作,但在控制台中我发现按钮2执行了两次
提前致谢!
答案 0 :(得分:2)
你以错误的方式接近这个问题。首先你不是在寻找来点击两个按钮。您正在寻找一种方法来单击一个按钮并在满足条件时执行操作。
基本上您只需要在WebBrowser button2.PerformClick()
方法中调用DocumentCompleted
即可。但是,如果要确保单击button1,可以在button1中设置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.
}
我希望能回答你的问题:)
答案 1 :(得分:0)
每次WebBrowser控件完成下载文档时都会执行DocumentCompleted。
您只需订阅一次。