深圳市科技网站开发,为爱表白网页设计模板素材,wordpress 刷新,广东基层团组织建设部网站在我们开发自定义控件的过程中,我们常常会给控件添加集合属性。比如定制Grid控件就会有Column集合。当集合属性发生变化时#xff0c;比如添加新元素#xff0c;删除新元素#xff0c;我们要通知控件去重绘以反映新的变化。我们可以创建一个集合类#xff0c;在类里添加一个…在我们开发自定义控件的过程中,我们常常会给控件添加集合属性。比如定制Grid控件就会有Column集合。当集合属性发生变化时比如添加新元素删除新元素我们要通知控件去重绘以反映新的变化。我们可以创建一个集合类在类里添加一个新的事件并在集合发生变化时触发事件。.Net框架已经为我们提供了现成的委托声明下面我们来看看怎么使用。 我创建一个名字叫HeaderCollection的类派生于System.System.Collections.ObjectModel.CollectionColumnHeader。利用.Net已经声明的CollectionChangeEventHandler委托来声明一个事件如下 public delegate void CollectionChangeEventHandler ( Object sender, CollectionChangeEventArgs e) CollecionChangeEventArgs的构造函数需要两个参数一个枚举类型CollectionChangeAction用它来指出发生了什么变化包含添加删除整个集合发生变化三种动作第二个参数传递发生变化的元素。 接下来我们重载CollectionT的几个方法InsertItemClearItemsRemoveItem在这些方法里触发事件下边是这个类的完整描述: using System;using System.Collections.Generic;using System.Text;using System.Collections;using System.Collections.ObjectModel;using System.ComponentModel;namespace CPI.DataProcess.Forms{[Serializable]public class HeaderCollection:CollectionColumnHeader{public event CollectionChangeEventHandler ItemChanged;public HeaderCollection(){}protected override void InsertItem(int index, ColumnHeader item){ base.InsertItem(index, item);ItemChanged(this,new CollectionChangeEventArgs(CollectionChangeAction.Add,item));}protected override void ClearItems(){base.ClearItems();ItemChanged(this, new CollectionChangeEventArgs(CollectionChangeAction.Refresh, null));}protected override void RemoveItem(int index){base.RemoveItem(index);ItemChanged(this, new CollectionChangeEventArgs(CollectionChangeAction.Remove, this[index]));}protected override void SetItem(int index, ColumnHeader item){ base.SetItem(index, item);ItemChanged(this, new CollectionChangeEventArgs(CollectionChangeAction.Refresh, null));}private void OnItemPropertyChanged(Object sender){ItemChanged(sender,null);}}} 这样我们的Collection就暴露出一个改变事件在使用它的地方给它添加委托就可以了例如 public void OnCollectionPropertyChanged(Object sender,CollectionChangeEventArgs e){Invalidate();}private HeaderCollection _Headers new HeaderCollection();Headers.ItemChangednew CollectionChangeEventHandler(OnCollectionPropertyChanged); 当集合属性发生变化时就会触发事件通知自定义控件重绘。