您的位置:程序门 -> .net技术 -> c#



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


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


120快来啊!c#事件问题(object sender, eventargs e) 这两个参数是干什么的?
发表于:2007-03-27 20:04:23 楼主
c#事件问题

比如定义一个button按纽的click事件,电脑是怎么分析出这个是单击而不是双击啊?还是敲键盘啊,是哪个参数决定的类别的?我怎么找不到相关代码,
发表于:2007-03-27 20:11:471楼 得分:0
另外还有doubleclick事件.

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

看看msdn上关于event的说明就明白
发表于:2007-03-27 20:44:203楼 得分:0
你管它电脑怎么分析出来的!

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

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

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

发表于:2007-03-27 22:16:314楼 得分:0
接到举报:芙蓉姐姐打来电话说有人要qj我,sender就是芙蓉,eventargs   e里就包括有个想qj芙蓉这个信息。后来,警察一听就挂了,不可能的事儿嘛。也就等于在事件处理代码里啥都没写。
===========
楼上说这些不吉利,哈哈..
发表于:2007-03-27 22:48:405楼 得分:0
sender   就是哪个信息原,eventargs   就是事件   类型
发表于:2007-03-28 10:17:316楼 得分:0
事件的订阅机制!!   找本karli   watson的《visual   c#入门经典》看看吧,第12章讲的很清楚的。     ^_^
发表于:2007-03-28 14:17:087楼 得分:0
事件处理代码也就是谁在那儿点击了按钮或干了这个那个的时候,我们相应的做什么,是吧?
110接到举报,还不得知道谁发送的,还有具体啥事不是吗?

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

=============================
有道理!
发表于:2007-03-28 14:29:238楼 得分:0
比如定义一个button按纽的click事件,电脑是怎么分析出这个是单击而不是双击啊?还是敲键盘啊,是哪个参数决定的类别的?我怎么找不到相关代码,

这个是事件委托类型决定的,和这两个参数没有关系,这两个参数一个是触发事件的对象,一个是附带的参数信息
发表于:2007-03-28 14:36:149楼 得分:0
比如定义一个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   的实例。
发表于:2007-03-28 14:37:5510楼 得分:0
事件处理代码也就是谁在那儿点击了按钮或干了这个那个的时候,我们相应的做什么,是吧?
110接到举报,还不得知道谁发送的,还有具体啥事不是吗?

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

========
注意:如果是楼主打来的电话,这个sender变成楼主了


快速检索

最新资讯
热门点击