• 0

Clearing Events (removing all event handlers) [C#]


Question

so, let's say i've got an anonymous method handling an event

Button b = new Button();
b.Click += delegate { /* some code */ };

is there any way to completely clear the event handler list for any particular event WITHOUT direct references to specific handlers?

9 answers to this question

Recommended Posts

  • 0
  dannysmurf said:

You should be able to just set the event to null.

b.Click = null;

If memory serves me, doing that should only work from inside the class itself.

Solution: Make a new button class.

class MyButton : Button
{
  public void ClearEvents()
  {
	this.Click = null;
  }
}

MyButton b = new MyButton();
b.Click += delegate { /* some code */ };

  • 0

well, i grudgingly worked around it by having a reference to each and every single event delegate. and then i'd remove and add them one at a time, setting the reference then the handler on the object. it really sucks, but it works

i guess i should look into redesigning it.

:(

  • 0
  dannyres said:

Well this is really against OO principles.. It's not really up to you to stop other classes from recieving a subscribed event, though I'm sure it is possible. I will see if I can find a solution for you now. :)

Dan

True...but you need to ensure that classes subscribing to said event unsubscribe before they are destroyed.

b.Click -= delegate;

  • 0
  John said:

Just curious... Why would you want to do this? :blink:

i've got a tabbed application for my company where all the tabs have a standard context menu. i chose to have a static class with a single context menu for all open tabs. the tabs would then ask the class to update the shared context menu and make sure all actions in the context menu get routed to the right tab.

so, for each menu item, i simply wanted to be able to reset the entire event instead of having to reference the last added event handler.

... yea

This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.