zoukankan      html  css  js  c++  java
  • 使用EventHandler传递参数

    1、MouseEventHandler和EventHandler传递参数的局限性分析

        开发过程中,特别是使用自定义控件时,常常需要对一个控件的click,mouseDown,mouseUp等事件的处理进行重新定义,以满足实际工程应用和要求。常用的方法如下:

    1. button1.Click -= new EventHandler(ButtonClick_Handler);
    2. button1.MouseUp -= new MouseEventHandler(ButtonUp_Handler);
    3. button1.Click += new EventHandler(ButtonClick_Handler);
    4. MouseUp += new MouseEventHandler(ButtonUp_Handler);

        可以看到,这里是通过EventHandler和MouseEventHandler这两个委托来能click和mouseup赋值。

        这两个委托的定义如下:

    EventHandler:
    .NET Framework 中的事件模型基于具有事件委托,该委托将事件与事件处理程序连接。引发事件需要两个元素:
    标识对事件提供响应的方法的委托。
    保存事件数据的类。

    1. public delegate void EventHandler(Object sender, EventArgs e);
    2. public event EventHandler NoDataEventHandler;

    MouseEventHandler:
    表示将处理窗体、控件或其他组件的 MouseDown、MouseUp 或 MouseMove 事件的方法。
    委托的原型:


    1. public delegate void MouseEventHandler(
    2.     Object sender,
    3.     MouseEventArgs e
    4. )

     
     这两个委托都有两个参数,其中Sender可以通过.net的机制来捕获,而EventArgs和MouseEventArgs 该如何使用呢?或者说如何给它赋值?暂时没有办法,还请高人指点。
       其实这个问题可以通过匿名委托来解决。
     
    2、使用匿名委托给一些EventHandler/MouseEventHandler的方法传参数
    关键代码如下:

    1. public void setSeatButtonMove_EventHandler(CSeatButton seatBtn, Object parentForm)
    2. {
    3.     ///* 常规事件加载方式 */
    4.     //seatBtn.button1.Click -= new EventHandler(seatButtonClick_Handler);
    5.     //seatBtn.button1.MouseUp -= new MouseEventHandler(seatButtonUp_Handler);
    6.     //seatBtn.button1.Click += new EventHandler(seatButtonClick_Handler);
    7.     //seatBtn.button1.MouseUp += new MouseEventHandler(seatButtonUp_Handler);
    8.     /* 匿名事件加载方式 */
    9.     seatBtn.button1.Click -= delegate(Object o, EventArgs e) { seatButtonClick_Handler(seatBtn.button1, parentForm); };
    10.     seatBtn.button1.MouseUp -= delegate(Object o, MouseEventArgs e) { seatButtonUp_Handler(seatBtn.button1, parentForm); };
    11.     seatBtn.button1.Click += delegate(Object o, EventArgs e) { seatButtonClick_Handler(seatBtn.button1, parentForm); };
    12.     seatBtn.button1.MouseUp += delegate(Object o, MouseEventArgs e) { seatButtonUp_Handler(seatBtn.button1, parentForm); };
    13. }

    14. public void seatButtonClick_Handler(object sender,object formOfSender)
    15. {
    16.     string formName = ((Form)formOfSender).Name.Trim();
    17.     if (formName.Equals("Form1"))
    18.     {
    19.         MessageBox.Show("In Form1,click a button!");
    20.     }
    21.     if (formName.Equals("Form2"))
    22.     {
    23.         MessageBox.Show("In Form2,click a button!");
    24.     }
    25. }
  • 相关阅读:
    P1271 【深基9.例1】选举学生会(基数排序)
    P7076 [CSP-S2020] 动物园
    #10127. 「一本通 4.3 练习 1」最大数
    P2671 [NOIP2015 普及组] 求和
    P3369 【模板】普通平衡树
    P2503 [HAOI2006]均分数据
    P2846 [USACO08NOV]Light Switching G(动态开点写法)
    P6278 [USACO20OPEN]Haircut G
    P2341 [USACO03FALL][HAOI2006]受欢迎的牛 G
    P1012 [NOIP1998 提高组] 拼数
  • 原文地址:https://www.cnblogs.com/ShaYeBlog/p/4609381.html
Copyright © 2011-2022 走看看