2011-08-25 101 views
4

這裏是簡短的示例代碼:在另一個事件處理程序中調用一個事件處理程序?

private void txtbox1_DoubleClick(object sender, EventArgs e) 
{ 
    button1_Click(object sender, EventArgs e); //can I call button1 event handler? 
} 

private void button1_Click(object sender, EventArgs e) 
{ 
    MessageBox.Show(txtbox1.Text); 
} 

我不知道是否會好起來的代碼在上面的方法是什麼?

+0

你可能但你真的想嗎?相反,您可以從處理程序中提取常用代碼和委託。我認爲它更清潔。對不起,沒有看到下面的確切答案 - 這樣做! – TheCodeKing

回答

7

你可以做到這一點 - 雖然你提供的代碼不能編譯。它應該是這樣的:

private void txtbox1_DoubleClick(object sender, EventArgs e) 
{ 
    button1_Click(sender, e); 
} 

private void button1_Click(object sender, EventArgs e) 
{ 
    MessageBox.Show(txtbox1.Text); 
} 

但最佳實踐和代碼的可讀性,你可能會更好過這樣做,尤其是當你沒有做的sendere使用:

private void txtbox1_DoubleClick(object sender, EventArgs e) 
{ 
    ShowMessageBox(); 
} 

private void button1_Click(object sender, EventArgs e) 
{ 
    ShowMessageBox(); 
} 

private void ShowMessageBox() 
{ 
    MessageBox.Show(txtbox1.Text); 
} 
+0

hmm,在兩個引用相同事件的事件處理程序中使用'sender'和'e'嗎? – woodykiddy

+0

@woodykiddy否 - txtbox1_DoubleClick的發件人是txtbox1,如果事件處理程序已使用Windows窗體設計器作爲標準連線,則button1_Click的發件人將爲button1 –

4

是的,你可以做到這一點;事件處理程序只是另一種方法。

但是它可能是值得創建,顯示在消息框中的新方法,以及具有Click事件處理程序調用:

private void txtbox1_DoubleClick(object sender, EventArgs e) 
{ 
    ShowTextboxMessage(); 
} 

private void button1_Click(object sender, EventArgs e) 
{ 
    ShowTextboxMessage(); 
} 

private void ShowTextboxMessage() 
{ 
    MessageBox.Show(txtbox1.Text); 
} 
+0

嗯看起來更好,你放它的方式。但是,如果我使用嵌套事件處理的任何「副作用」?我想這只是或多或少有點混亂。 – woodykiddy

+0

沒有任何副作用,你只是像其他任何方法一樣調用方法。 –

2

的事件處理程序只不過是一種方法,所以您可以像調用其他方法一樣調用它。

相關問題