c# 实现自定义属性改变触发自定义事件

代码,内含说明(界面是两个文本框textbox1,textbox2,和一个button1,界面的Load事件,button的click事件)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Test
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

//CustomClass cc = new CustomClass(1, "Lee");//测试属性值不变化的情况
CustomClass cc = new CustomClass();//空构造函数,一边测试属性值改变

private void Form1_Load(object sender, EventArgs e)
{
cc.Changed += new CustomClass.ChangedEventHandler(cc_Changed);//加载事件

}

private void button1_Click(object sender, EventArgs e)
{
cc.Cid = 1;
cc.Cname = "Lee";//给CustomClass的属性赋值,赋值是引发事件
string str = cc.Cid.ToString() + cc.Cname;
MessageBox.Show(str);
}

private void cc_Changed()//事件
{
textBox1.Text = cc.Cid.ToString();
textBox2.Text = cc.Cname;
}
}

public class CustomClass
{
public delegate void ChangedEventHandler();//定义委托
public event ChangedEventHandler Changed;//定义事件
private int _Cid;
private string _Cname;

public CustomClass()
{

}

public CustomClass(int cCid, string cCname)
{
this._Cid = cCid;
this._Cname = cCname;

}

protected virtual void OnChanged()
{
if (Changed!=null)
{
Changed();
}
}

public int Cid
{
get
{
return _Cid;
}
set
{
if (_Cid!=value)//这里是文本改变时的处理
{
_Cid = value;
OnChanged();//启动事件
}

}
}

public string Cname
{
get
{
return _Cname;
}
set
{
if (_Cname != value)
{
_Cname = value;
OnChanged();
}
}
}
}
}
以下是网上的一段非常经典的属性值改变引发自定义事件的例子,如下;
public class MyClass
{
public event EventHandler<PropertyChagedEventArgs> MyPropertyChanging;
public event EventHandler<PropertyChagedEventArgs> MyPropertyChanged;

private int _myProperty;
public int MyProperty
{
get { return _myProperty; }
set
{
if (value != _myProperty)
{
PropertyChagedEventArgs e = new PropertyChagedEventArgs("MyProperty", _myProperty, value);//初始化
if (this.MyPropertyChanging != null)
{
this.MyPropertyChanging(this, e);
if (e.Cancel) return;
}
_myProperty = (int)e.NewValue;
if (this.MyPropertyChanged != null)
{
this.MyPropertyChanged(this, e);
}
}
}
}

 

}

/// <summary>
/// 通用的类
/// </summary>
public class PropertyChagedEventArgs : EventArgs
{
public PropertyChagedEventArgs(string propertyName,object oldValue,object newValue)
{
PropertyName = propertyName;
OldValue = oldValue;
NewValue = newValue;
}

public bool Cancel { get; set; }
public string PropertyName { get; private set; }
public object OldValue { get; private set; }
public object NewValue { get; set; }
}

时间: 2024-09-15 16:43:19

c# 实现自定义属性改变触发自定义事件的相关文章

详解JavaScript中的自定义事件编写_基础知识

我们可以自定义事件来实现更灵活的开发,事件用好了可以是一件很强大的工具,基于事件的开发有很多优势(后面介绍). 与自定义事件的函数有 Event.CustomEvent 和 dispatchEvent. 直接自定义事件,使用 Event 构造函数: var event = new Event('build'); // Listen for the event. elem.addEventListener('build', function (e) { ... }, false); // Disp

JQuery最佳实践之精妙的自定义事件_jquery

恰好偶最近负责的一个可视化编辑器的开发,其中有些地方便应用了JQuery的自定义事件,而且达到了很好的效果-精简代码的同时充分利用了OO的原则. 本文以我实际应用开发过程中遇到的一个例子进一步说明"什么时候用JQuery的自定义事件以及怎么用",希望可以抛砖引玉,同时权且当是回复同学们的邮件了. Demo-Ingenious JQuery custom event JQuery最佳实践-精妙的自定义事件 问题:一个复选框X,你如何便捷地触发它的click事件的处理逻辑,但是又不改变它当

JavaScript 自定义事件的学习笔记

JavaScript 自定义事件就是有别于如 click, submit 等标准事件的自行定制的事件,在叙述自定义事件有何好处之前,先来看一个自定义事件的例子:  代码如下 复制代码 <div id="testBox"></div> // 创建事件 var evt = document.createEvent('Event'); // 定义事件类型 evt.initEvent('customEvent', true, true); // 在元素上监听事件 var

jQuery自定义事件

在JS中,消息的通知是通过事件表达的,当代码库增长到一定的规模就需要考虑将行为和自定义事件进行解耦,通过事件机制可以将类设计为独立的模块,通过事件对外通信提高了程序的开发效率. 了解自定义事件的概念: 类似 DOM 的行为:你在 DOM 节点(包括 document 对象)监听并触发自定义事件.这些事件既可以冒泡,也可以被拦截.这正是 Prototype.jQuery 和 MooTools 所做的.如果事件不能扩散,就必须在触发事件的对象上进行监听. 命名空间:一些框架需要你为事件指定命名空间,

JavaScript使用自定义事件实现简单的模块化开发

WEB前端最常见驱动方式就是事件了, 所有交互等等都是通过事件,前端的常见事件有:     UI事件: 焦点事件: 鼠标事件: 滚轮事件: 文本事件: 键盘事件: 变动事件: 现在网页上有一个输入框, 如果我们要对用户输入的字符串进行过滤, 或者是截获用户的输入进行处理的话, 我们要肿么办  同学们纷纷举手说:"老师,我知道,是使用添加事件", 老师也很欣慰地点了点头, 这群家伙真的是越来越聪明了, 老师又问了"如果要取消用户的输入怎么办了", 坐在最前排眼睛最小的

JavaScript使用自定义事件实现简单的模...

 WEB前端最常见驱动方式就是事件了, 所有交互等等都是通过事件,前端的常见事件有: UI事件: 焦点事件: 鼠标事件: 滚轮事件: 文本事件: 键盘事件: 变动事件: 现在网页上有一个输入框, 如果我们要对用户输入的字符串进行过滤, 或者是截获用户的输入进行处理的话, 我们要肿么办 同学们纷纷举手说:"老师,我知道,是使用添加事件", 老师也很欣慰地点了点头, 这群家伙真的是越来越聪明了, 老师又问了"如果要取消用户的输入怎么办了", 坐在最前排眼睛最小的同学急忙

jquery移除、绑定、触发元素事件使用示例详解

 这篇文章主要介绍了jquery移除.绑定.触发元素事件使用示例详解,需要的朋友可以参考下  代码如下: unbind(type [,data])     //data是要移除的函数 $('#btn').unbind("click"); //移除click $('#btn').unbind(); //移除所有     对于只需要触发一次的,随后就要立即解除绑定的情况,用one()    代码如下: $('#btn').one("click",function(){.

jquery移除、绑定、触发元素事件使用示例详解_jquery

复制代码 代码如下: unbind(type [,data])     //data是要移除的函数$('#btn').unbind("click"); //移除click$('#btn').unbind(); //移除所有 对于只需要触发一次的,随后就要立即解除绑定的情况,用one() 复制代码 代码如下: $('#btn').one("click",function(){.......}); 触发操作trigger() 方法触发被选元素的指定事件类型. 复制代码

jQuery实现获取绑定自定义事件元素的方法_jquery

本文实例讲述了jQuery实现获取绑定自定义事件元素的方法.分享给大家供大家参考,具体如下: (function ($) { // 自定义itemtab事件 $.fn.bind = function(types, data, fn) { // 重载jQuery.fn.bind方法,用来截获绑定自定义事件的元素 if(typeof types == 'string' && 'itemtab' == types) { var itemTouchStart = -1; // touchstart