zoukankan      html  css  js  c++  java
  • 类型事件定义

    要使用事件属性(Visual Basic 2005 中的自定义事件),请在引发事件的类中定义事件属性,然后在处理事件的类中设置事件属性的委托。要在一个类中实现多个事件属性,该类必须在内部存储和维护为每个事件定义的委托。一种典型方法是实现通过事件键进行索引的委托集合。

    若要存储每个事件的委托,可以使用 EventHandlerList 类或实现您自己的集合。集合类必须提供用于基于事件键设置、访问和检索事件处理程序委托的方法。例如,可以使用 Hashtable 类或从 DictionaryBase 类派生一个自定义类。不需要在类以外公开委托集合的实现详细信息。

    类中的每个事件属性定义一个 add 访问器方法和一个 remove 访问器方法。事件属性的 add 访问器将输入委托实例添加到委托集合。事件属性的 remove 访问器从委托集合中移除输入委托实例。事件属性访问器使用事件属性的预定义键在委托集合中添加和从委托集合中移除实例。

    使用事件属性处理多个事件

    1. 在引发事件的类中定义一个委托集合。

    2. 定义每个事件的键。

    3. 在引发事件的类中定义事件属性。

    4. 使用委托集合实现事件属性的 add 访问器方法和 remove 访问器方法。

    5. 使用公共事件属性可在处理事件的类中添加和移除事件处理程序委托。

    “折叠”图像示例

    下面的 C# 示例使用 EventHandlerList 存储每个事件的委托,从此来实现事件属性 MouseDownMouseUp。事件属性构造的关键字用粗体表示。

     

    Visual Basic 2005 中不支持事件属性。

    C# “复制”图像复制代码
    // The class SampleControl defines two event properties, MouseUp and MouseDown.
    class SampleControl: Component {
       // :
       // Define other control methods and properties.
       // :
       
       // Define the delegate collection.
       protected EventHandlerList listEventDelegates = new EventHandlerList();
       
       // Define a unique key for each event.
       static readonly object mouseDownEventKey = new object();
       static readonly object mouseUpEventKey = new object();
       
       // Define the MouseDown event property.
       public event MouseEventHandler MouseDown {  
          // Add the input delegate to the collection.
          add { listEventDelegates.AddHandler(mouseDownEventKey, value); }
          // Remove the input delegate from the collection.
          remove { listEventDelegates.RemoveHandler(mouseDownEventKey, value); }
       }
    
       // Define the MouseUp event property.
       public event MouseEventHandler MouseUp {
          // Add the input delegate to the collection.
          add { listEventDelegates.AddHandler(mouseUpEventKey, value); }
          // Remove the input delegate from the collection.
          remove { listEventDelegates.RemoveHandler(mouseUpEventKey, value); }
       }
    }
  • 相关阅读:
    36.百马百担问题。有100匹马,驮100担货,大马驮3担,中马驮2担,两匹小马驮1担,问有大中小马多少匹,共有多少组解?
    35.鸡兔同笼问题:今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何?
    34.设s=1+1/2+1/3+…+1/n,求与8最接近的s的值及与之对应的n值
    33.求1*2+2*3+3*4+……前n项的和
    32.求1+(1+2)+(1+2+3)+(1+2+3+4)+……的前n项的和
    31.假定2007年的一月一日是星期一,输入一个时间(包含年、月、日),求出它是星期几。
    vue-cli3 一直运行 /sockjs-node/info?t= 解决方案
    python pdf转word
    window django-https 证书
    Docker技术应用场景(转载)
  • 原文地址:https://www.cnblogs.com/chenxizhang/p/1680412.html
Copyright © 2011-2022 走看看