zoukankan      html  css  js  c++  java
  • C#自定义事件 范例:监视变量变化

    很多时候我们需要程序具有一种功能,就是当满足某一条件时触发某个动作,使用C#的事件机制就可以达到这个目的下面的例子是一个很好的演示,这段代码实现了对一个变量的监视,一旦变量发生改变,就触发动作

    定义事件类:

    1.     class Event
    2.     {
    3.         public delegate void tempChange(object sender, EventArgs e);
    4.         public event tempChange OntempChange;
    5.         string temp;
    6.         public string Temp
    7.         {
    8.             get
    9.             {
    10.                 return temp;
    11.             }
    12.             set
    13.             {
    14.                 if (temp != value)
    15.                 {
    16.                     OntempChange(this, new EventArgs());
    17.                 }
    18.                 temp = value;
    19.             }
    20.         }
    21.     }
    复制代码

    分析:
    要定义一个事件,首先声明事件和委托

    具体格式如下:
    声明委托

    1. public delegate void 事件句柄函数(object sender,EventArgs e);
    复制代码


    object用来传递事件的发生者,EventArgs用来传递事件的细节

    下面定义一个此委托类型类型的事件

    1. public event 事件句柄函数 事件名;
    复制代码


    在这里,我定义了一个名为OntempChange的事件,并在属性访问器里设定当读取值与原值不同时触发该事件





    使用事件(部分代码):

    1.     public partial class Form1 : Form
    2.     {
    3.         Event ven = new Event();
    4.         public Form1()
    5.         {
    6.             ven.OntempChange += new Event.tempChange(ven_OntempChange);
    7.             InitializeComponent();
    8.         }
    9.         void ven_OntempChange(object sender, EventArgs e)
    10.         {
    11.             MessageBox.Show(ven.Temp);
    12.         }
    13.         private void button1_Click(object sender, EventArgs e)
    14.         {
    15.             ven.Temp = textBox1.Text;
    16.         }
    复制代码

    在C#中,使用+=运算符将事件绑定给函数,在这里我把OntempChange事件绑定给了ven_OntempChange函数,在下面我定义了这个函数,在这个函数里设定了触发事件之后执行的相关操作(注意函数的参数)实际的运行效果就是,在文本框内输入字符,按下按钮后,如果你输入的值和上一次的不同,就会弹出对话框显示这个值~

  • 相关阅读:
    几个影响sql性能语句的例子
    orderby工作原理 + 最小代价取随机数
    count(*)实现原理+两阶段提交总结
    脏页flush和收缩表空间
    mysql本身用错索引+给字符串字段加索引
    Java概念辨析:equals和== equals和hashCode
    abstract方法必须在abstract类中 这句话是对的还是错的?
    java实际项目中interface和abstract interface 区别
    【timeisprecious】【JavaScript 】JavaScript String 对象
    Linux学习(三)putty,xshell使用以及密匙登陆
  • 原文地址:https://www.cnblogs.com/zhangzhu/p/3301704.html
Copyright © 2011-2022 走看看