.NET事件 - 什么是对象发送者和EventArgs e?

str*_*go0 76 .net events event-handling

sender和eventArgs是什么意思/指的是什么?我该如何使用它们(对于下面的场景)?

场景:

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

Noo*_*ilk 84

发件人是该操作的控件(例如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!";
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 嗯,"你"是发送活动的班级.因此,通常使用您自己的"MyControlsEventEventArgs"将"EventArgs"子类化,然后在其上设置要传递的属性.因此,当您编写发送事件的控件时,您只能将事物放在此处.如果要在*按钮*中放置一个字符串值,通常使用'CommandArgument'字段,您可以通过将发件人转换为'Button'来访问该字段(如我的帖子中所示). (5认同)
  • 谢谢!您是否介意扩展eventargs或提供有关它们的链接?例如,我可以通过eventargs传递字符串值吗?如果是这样,怎么样? (4认同)

Mat*_*ley 21

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

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

实现自己的事件时,请使用EventHandlerEventHandler<T>作为其类型.这可以保证您为所有事件准确地拥有这两个参数(这是一件好事).


Chr*_*ris 8

手动将发件人转换为自定义控件的类型,然后使用它来删除或禁用等等.例如,类似这样的事情:

private void myCustomControl_Click(object sender, EventArgs e)
{
  ((MyCustomControl)sender).DoWhatever();
}
Run Code Online (Sandbox Code Playgroud)

"发件人"只是被操作的对象(例如,点击).

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


小智 5

  1. 'sender'被称为对象,它对某些控件执行某些操作

  2. 'event'它有一些关于控制的信息,它有某些行为和身份由某个用户执行.当动作将通过发生事件添加而生成它保持在数组内被称为事件agrs