4

我需要从我没有代码的 dll 加载的控件中删除事件处理程序。由于似乎没有“官方”(即受 .NET Framework 的公共方法支持),因此我能够创建几个扩展方法,使用反射完全可以做到这一点。

有关所有详细信息,请参阅此博客文章:使用反射从 WinForm ListView 控件中删除事件

这是如何删除 SelectedIndexChanged 事件的代码示例(动态且无需访问原始处理程序)

//for a UserControl (in fact any control that implements System.ComponentModel.Component)
var userControl = new UserControl();
//we can get the current mapped event handlers
userControl.eventHandlers();
//its signature
userControl.eventHandlers_MethodSignatures();
//remove one by using the static field name
userControl.remove_EventHandler("EVENT_SELECTEDINDEXCHANGED");
//or use this one specifically mapped to the SelectedIndexChanged event
userControl.remove_Event_SelectedIndexChanged

我的问题是:“还有其他方法吗?”

虽然我的解决方案有效并且看起来很稳定,但我正在进行内部 .NET 对象操作,所以也许有更好的解决方案(在 4.0 或 4.5 中)?

相关文章:

4

0 回答 0