如何将事件处理程序与“组方法”相关联?

时间:2009-11-23 21:50:23

标签: c# event-handling

我试图在我定义的ArrayList上执行RemoveAt(i)方法时触发进程。 可以这样做吗?怎么样?

谢谢,

阿萨夫。

2 个答案:

答案 0 :(得分:2)

使用ObservableCollection而不是ArrayList怎么样?它随WPF一起提供,但我相信如果你使用.net 3.5,你可以毫无问题地使用它。 ObservableCollection实现了INotifyCollectionChanged,因此您可以访问CollectionChanged事件。

编辑:您还可以创建自己的集合,实现ICollection和IEnumerable,将ArrayList添加为字段并围绕您自己的Add和Remove方法引发事件。查看the solution provided by this guy

以下是关于如何实现目标的摘要:

public class MyArrayList : IList, ICollection, IEnumerable, ICloneable
{
    private ArrayList arrayList = new ArrayList();

    public event System.EventHandler RemovedItem;

    public void RemoveAt(int index)
    {
        this.arrayList.RemoveAt(item);
        if (RemovedItem != null) {
            RemovedItem(this, new EventArgs());
        }
    }

    // implement required interface members...
}

答案 1 :(得分:0)

您需要子类化数组列表并覆盖该方法才能使其正常工作。在.Net 3.5中有一个“ObservableCollection”类,它实现了一个CollectionChanged事件,如果不限制使用ArrayList,可以使用该事件。 ObservableCollection还实现了ICollection和IEnumerable,因此你应该可以将它交换为ArrayList。