【问题标题】:why does (sender,e) => SomeAction() works on winforms and not in asp.net为什么 (sender,e) => SomeAction() 适用于 winforms 而不是 asp.net
【发布时间】:2010-10-26 02:51:35
【问题描述】:

我有以下代码:

btnTest.Click += (sender,e) => SomeAction()

为什么这段代码在 WinForms 中有效,而在 asp.net 中无效。在 asp.net 中,我必须执行以下操作:

btnTest.Click += new EventHandler(SomeAction);

这两种情况下的目标框架都是 .net 4.0

【问题讨论】:

    标签: .net-4.0 delegates lambda


    【解决方案1】:

    您是否可能正在尝试调用

    btnTest.Click += (sender,e) => SomeAction() 
    

    来自 Page_Load 方法或其他事件处理程序?在这种情况下,参数“sender”和“e”已经声明,可能会导致冲突。

    将定义改为:

    btnTest.Click += (s,ea) => SomeAction();
    

    您可能希望将参数转发给您的函数:

    btnTest.Click += (s,ea) => SomeAction(s, ea);
    

    【讨论】:

    • 您的 Page_Load 已经定义了 sender 和 e,因此您不能将它们用作事件委托声明中的参数。
    【解决方案2】:

    ASP.NET 4.0 对我来说很好用:

    public partial class _Default : System.Web.UI.Page
    {
       protected void Page_Load(object sender, EventArgs e)
       {
       }
    
       private void SomeFunc()
       {
          Button1.Click += (sender, e) => SomeAction();
       }
    
       private void SomeAction()
       {
       }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-01-30
      • 1970-01-01
      • 2013-01-31
      • 1970-01-01
      • 1970-01-01
      • 2011-04-10
      • 1970-01-01
      相关资源
      最近更新 更多