【问题标题】:.NET Events - What are object sender & EventArgs e?.NET 事件 - 什么是对象发送者和 EventArgs e?
【发布时间】:2010-11-21 03:34:07
【问题描述】:

sender 和 eventArgs 是什么意思/指的是什么?我怎样才能使用它们(对于下面的场景)?

场景:

我正在尝试使用删除功能构建自定义控件,并且我希望能够删除在包含许多相同自定义控件的页面上单击的控件。

【问题讨论】:

  • @rogerdeuce,我们在 ASP.net c# 项目中遇到了这个问题,因此它被标记为 c#。我还根据您的编辑 cmets 添加了 vb 标签。

标签: .net events event-handling


【解决方案1】:

发送者是操作所针对的控件(比如 OnClick,它是按钮)。

EventArgs 是此事件的实现者可能会发现有用的参数。使用 OnClick 它不会包含任何好处,但在某些事件中,例如在 GridView 'SelectedIndexChanged' 中,它将包含新索引或其他一些有用的数据。

克里斯的意思是你可以这样做:

protected void someButton_Click (object sender, EventArgs ea)
{
    Button someButton = sender as Button;
    if(someButton != null)
    {
        someButton.Text = "I was clicked!";
    }
}

【讨论】:

  • 谢谢!您介意扩展 eventargs,还是提供有关它们的链接?例如,我可以通过 eventargs 传入一个字符串值吗?如果有,怎么做?
  • 好吧,“你”是发送事件的类。所以通常你用你自己的'MyControlsEventEventArgs'子类'EventArgs',然后为你想要传递的内容设置属性。因此,只有在编写发送事件的控件时才将内容放在这里。如果您想在 button 中放置一个字符串值,您通常使用“CommandArgument”字段,您可以通过将 sender 转换为“Button”来访问该字段(如我的帖子中所示)。
【解决方案2】:

sender 指的是调用触发事件处理程序的事件的对象。如果您有许多对象使用相同的事件处理程序,这将非常有用。

EventArgs 是一个虚拟基类。它本身或多或少无用,但如果您从中派生,您可以添加任何需要传递给事件处理程序的数据。

当您实现自己的事件时,使用EventHandlerEventHandler<T> 作为它们的类型。这可以保证您的所有事件都具有这两个参数(这是一件好事)。

【讨论】:

    【解决方案3】:
    1. 'sender' 被称为对某些对象执行某些操作的对象 控制

    2. '事件'它有一些关于控制的信息 一些行为和身份表现 由一些用户。当行动将 通过发生事件添加生成 它保存在数组中称为事件 agrs

    【讨论】:

      【解决方案4】:

      仅供参考,sendere 并非特定于 ASP.NET 或 C#。请参阅Events (C# Programming Guide)Events in Visual Basic

      【讨论】:

        【解决方案5】:

        手动将 sender 转换为自定义控件的类型,然后使用它来删除或禁用等。例如,像这样:

        private void myCustomControl_Click(object sender, EventArgs e)
        {
          ((MyCustomControl)sender).DoWhatever();
        }
        

        “发送者”只是被操作(例如点击)的对象。

        事件 args 是更复杂控件的子类,例如树形视图,以便您可以了解有关事件的更多详细信息,例如他们点击的确切位置。

        【讨论】:

        • 你能稍微扩展一下吗?如何处理发件人/事件参数?我不习惯使用它们。
        • @stringo0 sender 是引发事件的对象(它按照约定通过传递 'this' 来调用事件委托)。 EventArgs,如果不是子类,完全没有用。因此,除非您有 SelectedIndexEventArgs 参数或 CancelEventArgs,否则您将无能为力。如果您不习惯使用它们,您根本不需要它,但您在方法签名中需要它们。所以你可以简单地忽略它们。如果您编写一个 lambda 来处理事件,您甚至不需要编写这些参数的名称
        猜你喜欢
        • 1970-01-01
        • 2013-07-06
        • 2013-02-19
        • 2011-03-14
        • 1970-01-01
        • 1970-01-01
        • 2010-12-04
        • 1970-01-01
        相关资源
        最近更新 更多