zoukankan      html  css  js  c++  java
  • 事件委托 EventHandler

    事件就是当对象或类状态发生改变时,对象或类发出的信息或通知。发出信息的对象或类称为"事件源",对事件进行处理的方法称为"接收者",通常事件源在发出状态改变信息时,它并不知道由哪个事件接收者来处理.这就需要一种管理机制来协调事件源和接收者,C++中通过函数指针来完成的.在C#中事件使用委托来为触发时将调用的方法提供类型安全的封装


    事件的声明

    1.声明一个委托
    public delegate void EventHandler(object sender, System.EventArgs e);

    2.声明一个事件
    public event EventHandler Changed;

    3.引发一个事件
    public OnChanged(EnventArgs e)
    {
     if ( Changed != null)
     {
      Changed(this,e);
     }
    }

    4.定义事件处理程序
    public MyText_OnChanged(Object sender,EventArgs e)
    {
     ...
    }

    5.订阅事件(将事件处理程序添加到事件的调用列表中)

    myText.Changed += EventHandler(MyText_OnChanged);

    using System;  
    using System.Collections.Generic;  
    using System.Linq;  
    using System.Text;  
      
    namespace 事件的委托  
    {  
        class Program  
        {  
            static void Main(string[] args)  
            {  
                MyClass myClass = new MyClass();  
      
                // 6,将事件处理程序添加到事件的调用列表中(即事件布线)  
                myClass.Changed += new MyClass.ChangedEventHandler(myText_Changed);           
                  
                string str = "";  
                while (str != "quit")  
                {  
                    Console.WriteLine("please enter a string:");  
                    str = Console.ReadLine();  
                    myClass.Text = str;  
                }  
            }  
      
            // 对Change事件处理的程序  
            private static void myText_Changed(object sender, EventArgs e)  
            {  
                Console.WriteLine("text has been changed  :{0}
    ", ((MyClass)sender).Text);  
            }          
            }  
        public class MyClass   
        {  
            //1,声明空字符传myStr;  
            private string myStr = "";  
            //2,定义事件的委托  
            public delegate void ChangedEventHandler(object sender, EventArgs e);  
            //3,定义一个事件  
            public event ChangedEventHandler Changed;  
            //4,触发事件  
            protected virtual void OnChanged(EventArgs e)  
            {  
                if (this.Changed != null)  
                    this.Changed(this, e);  
            }  
            // 5,Text属性  
            public string Text  
            {  
                get { return this.myStr; }  
                set  
                {  
                    this.myStr = value;  
                    // 文本改变时触发Change事件  
                    this.OnChanged(new EventArgs());  
                }  
            }  
        }  
    }  
  • 相关阅读:
    Eq Eqv Equal
    list append 总是复制前面的参数,而不复制最后一个参数
    Teach Yourself Scheme in Fixnum Days 13 Jump跳转
    python 操作 office
    python ImportError: DLL load failed: %1 不是有效的 Win32 应用程序
    pywin32 安装错误 ImportError: DLL load failed: 不是有效的 Win32 应用程序
    Python version 2.7 required, which was not found in the registry
    scheme 解释器Guile 使用
    Teach Yourself Scheme in Fixnum Days 6 recursion递归
    求一个正则表达式,字母不能重复
  • 原文地址:https://www.cnblogs.com/yuhuameng/p/5154780.html
Copyright © 2011-2022 走看看