【问题标题】:Execute two buttons with single click单击执行两个按钮
【发布时间】:2013-02-04 04:52:28
【问题描述】:

我有一个简单的 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");
            }
        }

是否有任何方法或方式可以通过单击执行两个按钮,但是第二个按钮在加载网络浏览器之前不执行。

在第一个按钮中,我添加了

webBrowser1.DocumentCompleted + = new WebBrowserDocumentCompletedEventHandler (Button2_Click);

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

webBrowser1.DocumentCompleted - = new WebBrowserDocumentCompletedEventHandler (Button2_Click);

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

提前致谢!

【问题讨论】:

  • @JMK:我认为这里的问题不是两个方法一个接一个地执行,而是将第二个调用延迟到导航完成
  • @Nuffin 对不起,你是对的,WebBrowser 对象有一个加载的事件,我相信你可以订阅它

标签: c# .net visual-studio-2010 browser


【解决方案1】:

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

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

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

PageLoad()
{
  if(Request.QueryString["executeSecondButton"].Equals("Yes"))
  {
    button2_Click(button2, new RoutedEventArgs());
  }
}

【讨论】:

  • 什么时候执行Request.QueryString["executeSecondButton"].Equals("Yes");
【解决方案2】:

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

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

void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
    button2_Click(sender, e);
}

【讨论】:

  • 第一段代码很可能会失败,因为在 button2_Click 尝试访问之前 WebBrowser 可能无法完成加载页面。第二个很好。
  • 是的,当我阅读 button2 所做的事情时,我意识到第一个 sn-p 会有问题,因此我添加了第二个。我会修改我的答案。
【解决方案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() 触发的文档完全加载后执行。

【讨论】:

    【解决方案4】:

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

    【讨论】:

    • 谢谢 David Goshadze 这是我在第一个按钮中所做的,我添加了 webBrowser1.DocumentCompleted + = new WebBrowserDocumentCompletedEventHandler (Button2_Click);但是第二个执行按钮几次,所以我在按钮2的最后一行添加了:webBrowser1.DocumentCompleted - = new WebBrowserDocumentCompletedEventHandler(Button2_Click);它有效,但在控制台中我发现 Button 2 执行了两次
    【解决方案5】:

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

    button2_Click(sender, e);
    

    【讨论】:

    • 这将立即执行按钮,而不是在加载第二页之后。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 2014-07-31
    • 1970-01-01
    • 2020-10-28
    • 2020-12-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多