2016-09-23 178 views
0

我有兩個事件處理程序方法。 Button1_Click(對象發件人,EventArgs e)提示用戶單擊確定/取消。如果單擊ok,則會觸發另一個事件方法 - HiddenButton_Click(對象發件人,EventArgs e)。 現在,事情是我需要傳遞給HiddenButton_Click()方法的Button1_click()方法中有一些參數。我知道,我不應該直接從另一個事件方法中調用一個事件方法,而需要以另一種方法提取該功能。但是,我不確定正確的做法。從另一個事件處理程序調用事件處理程序方法並傳遞額外的參數

public partial class Test: System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    {   
    } 

    protected void Button1_Click(object sender, EventArgs e) 
    {    
     var x = 2; 
     var y = 4; 
     // this event fires another event below.  
     // need to pass x & y to the event below. 
    } 

    protected void HiddenButton_Click(object sender, EventArgs e, int x, int y) 
    { 
     var z = x + y; // need x and y values from above method here. 
    }  

} 
+0

您在哪裏可以找到一個事件處理程序不應該直接調用另一個事件處理程序的信息?順便說一句'HiddenButton_Click'看起來不像[[EventHandler '](https://msdn.microsoft.com/en-us/library/db0etb8x(v = vs.110).aspx)--Delegate兼容方法。對我來說,它看起來像一個只能像事件處理程序一樣命名的常規方法。是的,我知道你可以使用'Action '來聲明一個事件。 –

+0

我讀過,直接調用另一個事件方法不是最佳實踐。 HideenButton_Click是一種事件方法。 – user3399326

+0

我明白這個問題,但我認爲調用事件方法處理程序不是問題,因爲它只是一個方法。這種方法可能被註冊到事件並不會改變方法本身。這就是爲什麼我要求提供這些信息的原因。在我看來,直接從事件處理程序引發事件並不是一個好習慣。但是將其提取到另一個方法並不能解決事件處理程序內部調用路徑的問題。事件仍然在事件處理程序中引發。 –

回答

0

一種方法是使xy全局變量。這樣,您將可以訪問同一個類中的所有方法的兩個變量。

public partial class Test: System.Web.UI.Page 
    { 
     var x,y; 

     protected void Page_Load(object sender, EventArgs e) 
     {   
     } 

     protected void Button1_Click(object sender, EventArgs e) 
     {    
      x = 2; 
      y = 4; 
     } 

     protected void HiddenButton_Click(object sender, EventArgs e) 
     { 
     var z = x + y; 
     }  

    } 
+0

不幸的是,我不能讓x&y成爲全球。 – user3399326

+0

@ user3399326也許你可以創建一個'EventArgs'的子類,該子類包含x和y,並在'HiddenButton_Click'內部投射該事件參數。 –

相關問題