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. }
  • 相关阅读:
    Unix命令大全
    vs2008 与 IE8出现的兼容性问题
    Java 创建文件、文件夹以及临时文件
    如何修改Wamp中mysql默认空密码
    PAT 乙级真题 1003.数素数
    Tags support in htmlText flash as3
    DelphiXE4 FireMonkey 试玩记录,开发IOS应用 还是移植
    10 Great iphone App Review sites to Promote your Apps!
    HTML tags in textfield
    Delphi XE4 IOS 开发, "No eligible applications were found“
  • 原文地址:https://www.cnblogs.com/ShaYeBlog/p/4609381.html
Copyright © 2011-2022 走看看