2009-02-25 17 views
2

如果我寫代碼的形式處理來自控件的事件如下:當一個事件從一個控制編寫代碼,我應該投對象或引用它明確

private void btnButton_Click(object sender, EventArgs e) 
{ 
     Button btn = (Button)sender; 
     btn.Text = "Button pressed" 
} 

我就應該總是投發送對象到它的正確類型(如我做以上),還是更明確地引用該控件的名稱,如:

private void btnButton_Click(object sender, EventArgs e) 
{ 
     btnButton.Text = "Button pressed" 
} 

什麼是最好的做法嗎?我想我可能擔心這雖然太多...

+0

多個控件,我認爲這不是一個問題,關於最佳實踐,只是編碼風格。不過,謝謝你的提問,我也非常感興趣。 – abatishchev 2009-02-25 12:56:24

回答

2

如果您對每個控件都有單獨的事件處理程序 - 直接使用控件。

如果您有幾個控制一個事件處理程序 - 用鑄造sender

換句話說,儘可能經常使用控制,因爲它是可能的,恕我直言。

4

我更喜歡直接引用按鈕(選項2),因爲它更容易搜索在按鈕被引用和文本被改變。

+0

+1易於維護性 – 2009-02-25 12:24:16

+0

但是,如果您已將smae方法綁定到多個控件,則會失敗。在這種情況下,發件人可以是多個控件中的任何一個,因此發件人身份的假設失敗。 (請參閱Rob Stevenson-Leggett的答案。) – 2009-02-25 12:37:44

4

我個人使用發件人,如果我已經將相同的方法綁定到多個控件,例如

private void checkBox_Click(object sender, EventArgs e) 
{ 
    CheckBox box = (CheckBox)sender; 
    myDataObject.SomeOption = box.Value; 
} 

我認爲最好直接引用控件,如果可以維護。

請記住,動態創建的控件也需要使用sender方法。

2

這真的取決於應用程序。在某些情況下(通常是簡單的小表單),引用控件屬性就可以了。在某些情況下(任何時候你有編程添加的控件),絕對有必要使用轉換方法。

0

如果處理程序只適用於特定的控件,我會使用第一個選項。第二個選項適用於一般的處理程序,例如處理頁面上或某些控件上的所有CheckBoxes(Rob提供它的方式)。

1

我會用#2來處理單個控件的事件。爲了可維護性,我不會命名處理多個控件_的例程。相反,我做一個單獨的名稱,表示其處理一個事件例如MultiShapeButtons_Click而不是btnShapeButton1_Click

相關問題