日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

如何方便的让你的集合引发改变事件

發布時間:2023/11/29 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何方便的让你的集合引发改变事件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在我們開發自定義控件的過程中,我們常常會給控件添加集合屬性。比如定制Grid控件就會有Column集合。當集合屬性發生變化時,比如添加新元素,刪除新元素,我們要通知控件去重繪以反映新的變化。我們可以創建一個集合類,在類里添加一個新的事件,并在集合發生變化時觸發事件。.Net框架已經為我們提供了現成的委托聲明,下面我們來看看怎么使用。
??????我創建一個名字叫HeaderCollection的類,派生于System.System.Collections.ObjectModel.Collection<ColumnHeader>。利用.Net已經聲明的CollectionChangeEventHandler委托來聲明一個事件,如下:?????? public?delegate?void?CollectionChangeEventHandler?(
?Object?sender,
?CollectionChangeEventArgs?e
)
CollecionChangeEventArgs的構造函數需要兩個參數,一個枚舉類型CollectionChangeAction,用它來指出發生了什么變化,包含添加,刪除,整個集合發生變化三種動作,第二個參數傳遞發生變化的元素。
??????接下來我們重載Collection<T>的幾個方法:InsertItem,ClearItems,RemoveItem在這些方法里觸發事件,下邊是這個類的完整描述:
?????? 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:Collection<ColumnHeader>
{

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.ItemChanged
+=new?CollectionChangeEventHandler(OnCollectionPropertyChanged);
??????當集合屬性發生變化時就會觸發事件通知自定義控件重繪。

總結

以上是生活随笔為你收集整理的如何方便的让你的集合引发改变事件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。