-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

5 回答 5

3

您不应该认为执行第二个按钮单击。有 DocumentCompleted事件,您必须在之后收听并执行必要的代码。

于 2013-02-19T13:29:41.570 回答
3
private void button3_Click(object sender, EventArgs e)
{
  webBrowser1.DocumentCompleted += (sender, e) => {button2_Click(sender, e);};
  button1_Click(sender, e);
}

将注册 button2_Click 方法以在由 button1_Click() 触发的文档完全加载后执行。

于 2013-02-19T13:31:19.553 回答
1

您应该添加一个事件,该事件将在文档完成加载后调用代码。

private void Form1_Load(object sender, EventArgs e)
{
    webBrowser1.DocumentCompleted += webBrowser1_DocumentCompleted;
}    

void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
    button2_Click(sender, e);
}
于 2013-02-19T13:29:07.143 回答
1

您可以从 button1_click 方法进行以下调用。

button2_Click(sender, e);
于 2013-02-19T13:28:12.140 回答
-3

您可以在 url 中给出一个参数:

webBrowser1.Navigate("http://www.test.com?excuteSecondButton=Yes");

然后在第二页上检查是否给出了该参数:

PageLoad()
{
  if(Request.QueryString["executeSecondButton"].Equals("Yes"))
  {
    button2_Click(button2, new RoutedEventArgs());
  }
}
于 2013-02-19T13:28:41.543 回答