2015-02-12 58 views
-2

我有兩個按鈕和一個文本框。當我點擊按鈕1時,我希望事件處理程序引發一個事件,使按鈕2認爲它已被點擊。我想要做到這一點,而不是給按鈕1和2相同的事件處理程序。如何提高事件以選擇性地定位事件處理程序

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     // What do I put here that would get to the button2_click handler? 
    } 

    private void button2_Click(object sender, EventArgs e) 
    { 
     textBox1.Text = "button 2 clicked"; 
    } 
} 

上面的代碼是一個可行性測試,我想證明。目標是最終有一個多表單應用程序,其中點擊form1上的按鈕觸發form2上按鈕的button_click事件處理程序。

+0

聽起來很糟糕的設計,但爲什麼不直接從第一個事件處理程序調用其他事件處理程序? – 2015-02-12 06:46:44

+0

這只是第一次將代碼粗略化。如何在不同的表單中獲得兩個按鈕單擊事件以共享相同的事件處理程序? – Zambis 2015-02-13 04:40:10

回答

0

還有一種替代方法。

public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      MessageBox.Show("1 clicked"); 
      button2.PerformClick(); 
     } 

     private void button2_Click(object sender, EventArgs e) 
     { 
      MessageBox.Show("2 clicked"); 
     } 
    } 

button2.PerformClick做了什麼?

在這裏看到了很好的答案=>link

+0

如果您關心發件人在button2_Click事件內部的情況(如果您致電PerformClick,發件人將是button2),區別將在於此。 – 2015-02-12 06:54:34

+0

@RufusL感謝您指出。我沒有意識到這一點。 – 2015-02-12 07:02:19

0

可以刪除由設計器生成的事件處理(使用設計要做到這一點,或者它不會從designer.cs刪除),並實現自己的並用這樣的方式將它掛在2個事件上:

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
     button1.Click += myEventHandler; 
     button2.Click += myEventHandler; 
    } 

    private void myEventHandler(object sender, EventArgs e) 
    { 
     textBox1.Text = "button 2 clicked"; 
    } 
}