当前位置:编程学习 > C#/ASP.NET >>

120快来啊!C#事件问题(object sender, EventArgs e) 这两个参数是干什么的?

C#事件问题

比如定义一个BUTTON按纽的CLICK事件,电脑是怎么分析出这个是单击而不是双击啊?还是敲键盘啊,是哪个参数决定的类别的?我怎么找不到相关代码, --------------------编程问答-------------------- 另外还有DoubleClick事件.

object sender:如果你仔细看看事件(event)方面的内容就明白了。sender代表着raise事件的那个对象。
EventArgs e:向事件处理方法传递某些参数。
--------------------编程问答-------------------- sender 事件的发送者,即触发事件的组件
e 事件参数, 向事件处理程序提供触发事件时组件的状态和可设定属性等

看看MSDN上关于Event的说明就明白
--------------------编程问答-------------------- 你管它电脑怎么分析出来的!

sender和event arguments,就像英语单直接翻译过来那样,谁发送的,还有,发送时候附带了什么信息。这不结了吗。想想,这不也挺合理的嘛。

事件处理代码也就是谁在那儿点击了按钮或干了这个那个的时候,我们相应的做什么,是吧?
110接到举报,还不得知道谁发送的,还有具体啥事不是吗?

接到举报:芙蓉姐姐打来电话说有人要QJ我,sender就是芙蓉,EventArgs e里就包括有个想QJ芙蓉这个信息。后来,易做图一听就挂了,不可能的事儿嘛。也就等于在事件处理代码里啥都没写。

--------------------编程问答-------------------- 接到举报:芙蓉姐姐打来电话说有人要QJ我,sender就是芙蓉,EventArgs e里就包括有个想QJ芙蓉这个信息。后来,易做图一听就挂了,不可能的事儿嘛。也就等于在事件处理代码里啥都没写。
===========
楼上说这些不吉利,哈哈.. --------------------编程问答-------------------- sender 就是哪个信息原,EventArgs 就是事件 类型 --------------------编程问答-------------------- 事件的订阅机制!! 找本Karli Watson的《Visual C#入门经典》看看吧,第12章讲的很清楚的。  ^_^ --------------------编程问答-------------------- 事件处理代码也就是谁在那儿点击了按钮或干了这个那个的时候,我们相应的做什么,是吧?
110接到举报,还不得知道谁发送的,还有具体啥事不是吗?

接到举报:芙蓉姐姐打来电话说有人要QJ我,sender就是芙蓉,EventArgs e里就包括有个想QJ芙蓉这个信息。后来,易做图一听就挂了,不可能的事儿嘛。也就等于在事件处理代码里啥都没写。

=============================
有道理! --------------------编程问答-------------------- 比如定义一个BUTTON按纽的CLICK事件,电脑是怎么分析出这个是单击而不是双击啊?还是敲键盘啊,是哪个参数决定的类别的?我怎么找不到相关代码,

这个是事件委托类型决定的,和这两个参数没有关系,这两个参数一个是触发事件的对象,一个是附带的参数信息 --------------------编程问答-------------------- 比如定义一个BUTTON按纽的CLICK事件,电脑是怎么分析出这个是单击而不是双击啊?还是敲键盘啊,是哪个参数决定的类别的?我怎么找不到相关代码,

-----------------------

每个事件的触发条件都是人为定义的,电脑只是根据人的定义去引发事件。
比如,Button 的 Click 事件就是定义为有人单击该按钮或者该按钮被通过键盘按下(比如回车、空格、快捷键之类的)时被激发的。

至于所谓 sender, EventArg 楼上都讲得比较清楚了。

所谓 sender,就是事件的发送者,激发事件的控件(参考frjj的例子),EventArg 就是这个事件包含的相信信息。事件也可以不包含信息。


给些代码:
public class IncreaseEventArgs : EventArgs
{
    private DateTime fireTime;
    private int oldValue;
    private int newValue;
    public int NewValue
    { get { return newValue; } }
    public int OldValue
    { get { return oldValue; } }
    public DateTime FireTime
    { get { return fireTime; } }
    public IncreaseEventArgs(int oldVal, int newVal)
    {
        this.fireTime = DateTime.Now;
        this.oldValue = oldVal;
        this.newValue = newVal;
    }
}


public void IncreaseEventHandler(object sender, IncreaseEventArgs e);

public class EventSample : Component
{

public event EventHandler Click;

public event IncreaseEventHandler Increased;

protected void OnClick(EventArgs e)
{
    if(Click != null)
    {
        Click(this, e);
    }
}

protected void OnIncreased(IncreaseEventArgs e)
{
    if(Increased!= null)
    {
        Increased(this, e);
    }
}

int i;

public void IncreaseInt(int step)
{
    int temp = i;
    i += step;
    OnIncreased(new IncreaseEventArgs(temp, i));
}
}


当外界通过某种方法调用 IncreaseInt 方法时,就会激发 Increased 事件。如果你的事件处理程序这样写:

private EventSample ctr1;

ctr1.Id = "ctr1";
ctr1.Increased += new IncreaseEventHandler(ctr1_OnIncreased);

private void ctr1_OnIncreased(object sender, IncreaseEventArgs e)
{
   //....
}

事件被激发后,上面的方法将会被执行,这是, sender 就是 ctr1,e 里就是包含了事件激发的时间,旧值和新值的 IncreaseEventArgs 的实例。 --------------------编程问答-------------------- 事件处理代码也就是谁在那儿点击了按钮或干了这个那个的时候,我们相应的做什么,是吧?
110接到举报,还不得知道谁发送的,还有具体啥事不是吗?

接到举报:芙蓉姐姐打来电话说有人要QJ我,sender就是芙蓉,EventArgs e里就包括有个想QJ芙蓉这个信息。后来,易做图一听就挂了,不可能的事儿嘛。也就等于在事件处理代码里啥都没写。

========
注意:如果是楼主打来的电话,这个sender变成楼主了 --------------------编程问答-------------------- 嗯,看了各位的解释,有点理解了,学习ing --------------------编程问答--------------------
引用 8 楼 yumanqing 的回复:
比如定义一个BUTTON按纽的CLICK事件,电脑是怎么分析出这个是单击而不是双击啊?还是敲键盘啊,是哪个参数决定的类别的?我怎么找不到相关代码,

这个是事件委托类型决定的,和这两个参数没有关系,这两个参数一个是触发事件的对象,一个是附带的参数信息


+1
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,