c# 实现自定义属性改变触发自定义事件
2012-12-19 12:07
417 查看
直接上代码,内含说明(界面是两个文本框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; }
}
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; }
}
相关文章推荐
- 通过c# 实现自定义属性改变触发自定义事件 ,理解自定义事件及其触发过程
- c# 自定义事件,实现变量的值改变后就触发该事件
- 通过自定义属性存储数据实现输入框获得焦点与失去焦点改变value值
- 提取aspnet_Profile中自定义的用户属性(C#实现)
- 提取aspnet_Profile中自定义的用户属性(C#实现)
- C#为控件或自定义控件添加自定义属性,自定义事件
- c#中怎样实现当一个类实例的属性值改变时,触发事件调用另一个方法?
- C#自定义属性实现
- 提取aspnet_Profile中自定义的用户属性(C#实现)
- 实现高端的自定义View属性动画自定义圆改变颜色进行下平移
- c# 与java 相同实现 自定义事件的触发及监听
- c#中实现当一个类实例的属性值改变时,触发事件调用另一个方法
- 在C#中实现自定义属性
- C# 自定义控件,自定义属性,自定义事件
- 自定义属性的实现
- C#+AE 实现点击查询属性功能
- 举例讲解C#中自动实现的属性
- JavaScript DOM中 改变样式属性,实现动画效果 2
- RichTextBox实现关键字自定义颜色显示(C#)
- C#改变变量触发事件