相关疑难解决方法(0)

如何从事件中删除所有事件处理程序

要在控件上创建新的事件处理程序,您可以执行此操作

c.Click += new EventHandler(mainFormButton_Click);
Run Code Online (Sandbox Code Playgroud)

或这个

c.Click += mainFormButton_Click;
Run Code Online (Sandbox Code Playgroud)

并删除事件处理程序,您可以执行此操作

c.Click -= mainFormButton_Click;
Run Code Online (Sandbox Code Playgroud)

但是如何从事件中删除所有事件处理程序?

.net c# events

348
推荐指数
8
解决办法
39万
查看次数

WPF:鼠标离开事件不会在鼠标按下时触发

鼠标进入/离开事件我遇到了问题.按下鼠标按钮并用光标在控件内保持,然后光标移出控件足够快,此事件不会触发.

你能告诉我为什么会这样吗?有没有办法正确获得这些活动?

请检查示例项目以查看其实际操作:https://www.dropbox.com/s/w5ra2vzegjtauso/SampleApp.zip

更新.我在这里找到了同样的问题而没有答案.在那里开始赏金.

wpf mouse events

17
推荐指数
2
解决办法
1万
查看次数

如何删除"Button"的"Click"事件的所有事件处理程序?

我有一个按钮控件,我需要删除附加到其Click事件的所有事件处理程序.

怎么可能呢?

Button button = GetButton();
button.Click.RemoveAllEventHandlers();
Run Code Online (Sandbox Code Playgroud)

.net c# events event-handling

16
推荐指数
4
解决办法
3万
查看次数

动态删除事件处理程序的解决方案(使用反射)。有一个更好的方法吗?

我需要从从我没有代码的 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
Run Code Online (Sandbox Code Playgroud)

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

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

相关文章:

c# reflection

5
推荐指数
1
解决办法
2129
查看次数

标签 统计

c# ×3

events ×3

.net ×2

event-handling ×1

mouse ×1

reflection ×1

wpf ×1