2016-09-23 132 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'内部投射该事件参数。 –

相关问题