C#自定义事件:属性改变引发事件示例

时间:2021-08-17 20:58:42
 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace ConsoleApplication15
{
class Program
{
static void Main(string[] args)
{
Monitor m = new Monitor();
m.PropertyChanging += new Monitor.EventHandler(m_PropertyChanging);
m.Year = ;
m.Year = ;
m.Year = ; } static bool First=false;
static void m_PropertyChanging(object sender, PropertyChangingEventArgs e)
{
if (First==false)
{
First = true;
}
else
{
if (e.NewValue < || e.NewValue > )
e.Cancel = true;
}
}
} //(属性正在改变的时候)事件数据
class PropertyChangingEventArgs : EventArgs
{
//构造函数
public PropertyChangingEventArgs(string PropertyName, int OldValue, int NewValue)
{
_PropertyName = PropertyName;
_OldValue = OldValue;
_NewValue = NewValue;
} //存储数据
private string _PropertyName;
private int _OldValue;
private int _NewValue;
private bool _Cancel; //获取或设置属性
public string PropertyName
{
set
{
_PropertyName = value;
}
get
{
return _PropertyName;
}
}
public int OldValue
{
set
{
_OldValue = value;
}
get
{
return _OldValue;
}
}
public int NewValue
{
set
{
_NewValue = value;
}
get
{
return _NewValue;
}
}
public bool Cancel
{
set
{
_Cancel = value;
}
get
{
return _Cancel;
}
}
} class Monitor
{
//定义委托
public delegate void EventHandler(object sender, PropertyChangingEventArgs e);
//定义事件
public event EventHandler PropertyChanging; //事件处理(用属性方法)
int _YearValue;
public int Year
{
get
{
return _YearValue;
}
set
{
if (_YearValue != value)
{
if (PropertyChanging != null)
{
PropertyChangingEventArgs e = new PropertyChangingEventArgs("Year", _YearValue, value);
PropertyChanging(this, e);
if (e.Cancel)
{
return;
}
else
{
_YearValue = value;
}
}
}
}
}
} }