【问题标题】:Call event handler method from another event handler and pass extra parameters从另一个事件处理程序调用事件处理程序方法并传递额外的参数
【发布时间】:2017-01-31 20:16:35
【问题描述】:

我有两个事件处理方法。 Button1_Click(object sender, EventArgs e) 提示用户单击确定/取消。如果单击 ok,则触发另一个事件方法 - HiddenButton_Click(object sender, EventArgs e)。 现在,问题是我在 Button1_click() 方法中有一些参数需要传递给 HiddenButton_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.
    }       

}

【问题讨论】:

  • 你在哪里找到一个事件处理程序不应该直接调用另一个事件处理程序的信息? BTW HiddenButton_Click 看起来不像 EventHandler<T>-Delegate 兼容方法。对我来说,它看起来像一个普通的方法,只是命名为事件处理程序。是的,我知道您可以使用 Action<T, T, T, T> 声明事件。
  • 我读到直接从另一个事件方法调用一个事件方法不是最佳实践。 HideenButton_Click 是一个事件方法。
  • 我理解这个问题,但我认为调用事件方法处理程序没有问题,因为它只是一个方法。这个方法可以注册到一个事件中并不会改变方法本身。这就是为什么我要求提供该信息来源。在我看来,直接从事件处理程序引发事件并不是一个好习惯。但是将其提取到另一个方法并不能解决事件处理程序内部的调用路径问题。该事件仍在事件处理程序内部引发。

标签: c# asp.net events event-handling


【解决方案1】:

一种方法是创建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;
        }       

    }

【讨论】:

  • 很遗憾,我无法使 x & y 全球化。
  • @user3399326 也许你可以创建一个包含 x 和 y 的 EventArgs 的子类,并在 HiddenButton_Click 内转换为该事件参数。
猜你喜欢
  • 2021-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-30
相关资源
最近更新 更多