C#方法中的 object sender EventArgs e

 

( object sender , EventArgs e )            是C#里面的事件响应的代码,结合网上的一些资料,总结如下:

object 是事件的激发控件,或叫事件源:
具体我们可以用MessageBox.Show(sender.ToString())直接输出,我们可以直接看到;

EventArgs是包含事件数据的类的基类,用于传递事件的细节:
e是事件参数,也就是说在定义事件的类里定义的那些属性,在某些事件里,e用处不大;
所包含的细节多少,根据各种EventArgs的定义而定,如EventArgs就是一个空值,我们在VS环境中右键"转到定义处"就可以发现其定义是这样:

public class EventArgs
       {
           // 摘要:
           //        表示没有事件数据的事件。
           public static readonly EventArgs Empty;

           // 摘要:
           //        初始化 System.EventArgs 类的新实例。
   
           public EventArgs();
        }

我想,这也是网上有的网友说在定义事件时候可以不要EventArgs参数的原因;有的即使在事件定义时定义了它,也不必在事件里理会它;

如MouseEventArgs是EventArgs的子类,那么它就定义了许多可以输出的值,其定义如下:
// 摘要:
       //        为 System.Windows.Forms.Control.MouseUp、System.Windows.Forms.Control.MouseDown
       //        和 System.Windows.Forms.Control.MouseMove 事件提供数据。
       [ComVisible(true)]
       public class MouseEventArgs : EventArgs
       {
           // 摘要:
           //        初始化 System.Windows.Forms.MouseEventArgs 类的新实例。
           //
           // 参数:
           //      clicks:
           //        鼠标按钮曾被按下的次数。
           //
           //      delta:
           //        鼠标轮已转动的制动器数的有符号计数。
           //
           //      Y:
           //        鼠标单击的 y 坐标(以像素为单位)。
           //
           //      button:
           //        System.Windows.Forms.MouseButtons 值之一,它指示曾按下的是哪个鼠标按钮。
           //
           //      x:
           //        鼠标单击的 x 坐标(以像素为单位)。
           public MouseEventArgs(MouseButtons button, int clicks, int x, int y, int delta);

           // 摘要:
           //        获取曾按下的是哪个鼠标按钮。
           //
           // 返回结果:
           //        System.Windows.Forms.MouseButtons 值之一。
           public MouseButtons Button { get; }
           //
           // 摘要:
           //        获取按下并释放鼠标按钮的次数。
           //
           // 返回结果:
           //        一个 System.Int32,包含按下并释放鼠标按钮的次数。
           public int Clicks { get; }
           //
           // 摘要:
           //        获取鼠标轮已转动的制动器数的有符号计数。制动器是鼠标轮的一个凹口。
           //
           // 返回结果:
           //        鼠标轮已转动的制动器数的有符号计数。
           public int Delta { get; }
           //
           // 摘要:
           //        获取鼠标在产生鼠标事件时的位置。
           //
           // 返回结果:
           //        一个 System.Drawing.Point,包含鼠标的 x 和 y 坐标(以像素为单位)。
           public Point Location { get; }
           //
           // 摘要:
           //        获取鼠标在产生鼠标事件时的 x 坐标。
           //
           // 返回结果:
           //        鼠标的 X 坐标(以像素为单位)。
           public int X { get; }
           //
           // 摘要:
           //        获取鼠标在产生鼠标事件时的 y 坐标。
           //
           // 返回结果:
           //        鼠标的 Y 坐标(以像素为单位)。
           public int Y { get; }
       }
比如在MouseEventArgs的Mouse事件中,可以看到e包括mouse的坐标值等,以供你的程序使用。e参数就是通过这些定义的属性进行调用或输出的,这里我们就可以调用e.Y或e.X获得具体的参数细节了.


EventHandler是一个委托声明如下(其在.Net类库中如下声明的)
public delegate void EventHandler( object sender , EventArgs e )
所以,所有形如:  void 函娄名(object 参数名,EventArgs 参数名); 的函数都可以作为Control类的Click事件响应方法了。object的参数名一般用Source或Sender来表示,两个没有区别。
如下面所定义的一个事件响应方法:
private void button1_Click(object sender, System.EventArgs e)
参数object sender表示引发事件的对象(其实这里传递的是对象的引用,如果是button1的click事件则sender就是button1),System.EventArgs e 代表事件的相应信息。


下面我们可以看下Button类的事件声明,以Click事件为例。
public event EventHandler Click;
这里定义了一个EventHandler类型的事件Click
private void button1_Click(object sender, System.EventArgs e)
                   {
                             ...
                       }
这是我们和button1_click事件所对应的方法。
那我们怎么把这个方法和事件联系起来呢,请看下面的代码。
this.button1.Click += new System.EventHandler(this.button1_Click);   
把this.button1_Click方法绑定到this.button1.Click事件。

以上原理简单理解下就可以了,在实际操作中我们只需要在代码里面调用Web控件里面使用button控件,里面的属性OnClick="button1_Click" 语句便可以起到调用方法的功能了。在VS。NET中可以直接在设计页面加入button, 而上面红色的那行代码编译器会自动实现(可在cs代码文件里面看到)。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值