2011-04-04 118 views
4

我的程序中有两个按钮,我希望当我按下第一个按钮时,第二个按钮会自动点击(在第一个按钮的事件处理程序中,我想通过编码按下第二个按钮)。如何通过编码点击按钮?

private void button1_Click(object sender, EventArgs e) 
    { 

     passWord = pwd.Text; 
     user = uName.Text; 


     loginbackend obj = new loginbackend(); 
     bool isValid = obj.IsValidateCredentials(user, passWord, domain); 
     if (isValid) 
     { 
      loginbackend login = new loginbackend(); 
      passWord = pwd.Text; 

      login.SaveUserPass(passWord); 
      HtmlDocument webDoc = this.webBrowser1.Document; 
      HtmlElement username = webDoc.GetElementById("__login_name"); 
      HtmlElement password = webDoc.GetElementById("__login_password"); 

      username.SetAttribute("value", user); 
      password.SetAttribute("value", passWord); 

      HtmlElementCollection inputTags = webDoc.GetElementsByTagName("input"); 

      foreach (HtmlElement hElement in inputTags) 
      { 
       string typeTag = hElement.GetAttribute("type"); 
       string typeAttri = hElement.GetAttribute("value"); 

       if (typeTag.Equals("submit") && typeAttri.Equals("Login")) 
       { 
        hElement.InvokeMember("click"); 

        break; 
       } 
      } 
      button3_Click(sender, e); 
      label1.Visible = false ; 
      label3.Visible = false; 
      uName.Visible = false; 
      pwd.Visible = false; 
      button1.Visible = false; 
      button2.Visible = true; 
    } 
     else 
     { 
      MessageBox.Show("Invalid Username or Password"); 
     } 

    } 
private void button3_Click(object sender, EventArgs e) 
    { 
     HtmlDocument webDoc1 = this.webBrowser1.Document; 
     HtmlElementCollection aTags = webDoc1.GetElementsByTagName("a"); 

     foreach (HtmlElement link in aTags) 
     { 
      if (link.InnerText.Equals("Show Assigned")) 
      { 
       link.InvokeMember("click"); 
       break; 
      } 
     } 
    } 
+2

手动增加按钮(或任何控件)单击事件的可能重复。 C#(http://stackoverflow.com/questions/817343/raise-button-or-any-control-click-event-manually-c)。还读了第二高的投票答案,这是我会走的路(即不模拟点击,而是将功能移到单独的方法)。 – 2011-04-04 14:30:29

+0

点击第一个按钮凭证被填充,一个登录按钮被按下,其次我想要在网站的新页面中有一个链接,我想按。按下它,我发现只有一种方法是将代码放入第二个按钮并在第一个按钮中调用它,但这不起作用 – Prachur 2011-04-04 14:48:32

回答

5

我想你所描述的是你要调用的方法点击按钮B的时候,但后来也调用该方法被点击按钮A时。

protected void ButtonA_Click(...) 
{ 
    DoWork(); 
} 

protected void ButtonB_Click(...) 
{ 
    // do some extra work here 
    DoWork(); 
} 

private void DoWork() 
{ 
    // do the common work here 
} 

根据在事件处理程序的实现,也可以只调用第二个按钮的事件处理程序从第一的,但上面的方法是“正确”的方式做到这一点。

+0

实际上,第一个按钮处理两个事件,首先是将其凭据发送到第一个网站一个登录按钮在其中,其次是在网站的第一页有一个链接,我想点击并实现我已经将它与一个按钮相关联,该按钮是通过第一个按钮的事件处理程序中的编码按下的,但这两件事没有一起发生 – Prachur 2011-04-04 14:30:14

+0

你能发表一些代码吗?这听起来像你在某处丢失了某些东西。 – Town 2011-04-04 14:32:40

+0

我已经发布了代码 – Prachur 2011-04-04 14:39:45

1

我想,你并不关心按钮是否被点击,你只是在意第二个按钮的代码被执行。所以......就这样称呼它:

void button1_Click(...) 
{ 
    button2_Click(...); 
} 
+0

@DH调用button2_Click从button1_Click处理程序冒险通过不正确的“发件人”引用。调用button2.PerformClick()保留按钮2是发件人。 (是的,您可以调用button2_Click(button3,e);但我会争辩说.PerfomClick()更可靠,因为您不必跟踪发件人。) – 2011-04-04 14:40:30

2

你可以直接调用该方法。或者直接调用_Click方法;或者直接调用_Click方法;

private void btnB_Click(object sender, EventArgs e) 
    { 
     btnA_Click(sender, e); 
     doB(); 
    }