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 --------------------编程问答--------------------
+1
补充:.NET技术 , C#