2011-04-19 47 views
0

想象一下,像這樣的方法(在Win形式):如何通過「發件人」對象檢查「方法組」?

//First method 
private void buttonStart_Click(object sender, EventArgs e) 
{ 
     //I call another method here 
     this.GetData(sender, null) 
} 

//Second method 
private void GetData(object sender, EventArgs e) 
{ 
     //how to check IF calling method is buttonStart_Click ??? 
     if(sender.Equals == buttonStart_Click) 
     { 
      //DO BLAH BLAH 
     } 
} 

我希望我是清楚的,那就是我想知道哪種方法是調用「的GetData」。 note我知道我可以擁有一個全局變量並將其設置爲某個值,但是我想知道是否有直接的方法來執行此操作?

謝謝。

+0

你想用這個做什麼?有可能有更好的方法來做到這一點。 – 2011-04-19 13:39:42

+0

如果您正在使用WPF,則可以使用帶命令參數的命令。 – Howard 2011-04-19 13:40:00

+0

我想知道哪些方法調用另一個方法,而不使用額外的參數。它在WinForms中。 – 2011-04-19 13:43:11

回答

1

sender不會是buttonStart_Click,它只是按鈕。所以你可以測試它。

if (sender != null && sender.Equals(buttonStart)) 
{ 
    // work with this information 
} 

但是,如果你發現自己走這路線,你可能會看到多個每個if塊具有取決於sender身份不同的行爲。如果是這樣的話,你最好用不同的方法。爲每個事件設置不同的處理程序,通過代理封裝不同的邏輯等。不要結束頁面充滿if/else if/else if/...

+0

謝謝,你介意給這個案例的代表例子嗎? – 2011-04-19 14:14:05

+0

@Sean,沒有什麼不是純粹的設計。我要說的是確保你的方法和調查替代方案。你想避免結束一個廚房 - 廚房方法,這個方法太過分了,只能做出與切線相關的決定。也許所有你需要做的就是傳遞一個參數,也許'buttonStart_Click'實際上需要做的工作,而不是讓'GetData'處理所有事情,或者'buttonStart_Click'需要給'GetData'做手段來做它需要做的事情沒有'GetData'知道這些手段是什麼(例如,一個代表)。 – 2011-04-19 14:18:11

+0

(這個代表實際上可以是一個Action <>或Func <>')。這是一個建議。繼續工作,無論你在做什麼。一旦你有更多的代碼,也許會問一個關於如何將它重構成更易於管理(如果有保證)的新問題。 – 2011-04-19 14:19:17

0

如果你有做不同的事情,因爲你叫一些其他方法的方法,它可能是最好只調用不同的方法:

//First method 
private void buttonStart_Click(object sender, EventArgs e) 
{ 
     //I call another method here 
     this.SpecialGetData(sender, null) 
} 

//Second method 
private void GetData(object sender, EventArgs e) 
{ 
    // Do regular stuff 
} 

//Special second method 
private void SpecialGetData(object sender, EventArgs e) 
{ 
    //DO BLAH BLAH 
} 
+0

嗯問題是'如果(sender.Equals == buttonStart_Click)'不可編譯 – 2011-04-19 13:42:10

+0

@肖恩:抱歉,忘了刪除它。修復。 – 2011-04-19 13:42:55

+0

是的,我知道這是可能的,但我不知道這是否是一個直接的做法,然後somone可能最終以千方法。如何在一個方法內做到這一點? – 2011-04-19 13:47:53

0

不知道你爲什麼這樣,但如果你需要... http://www.csharp411.com/c-get-calling-method/

+0

請考慮文檔中的以下句子:「由於優化過程中發生代碼轉換,StackTrace可能無法報告預期的方法調用數量。」 – 2011-04-19 13:51:57

相關問題