2011-04-04 154 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(); 
    }