Click here to Skip to main content
11,410,750 members (64,930 online)
Click here to Skip to main content


, 9 Oct 2005
Rate this:
Please Sign up or sign in to vote.
Sick and tired of writing diagnostic event handlers to see when a control is firing events? You need EventSpy!

Sample Image - eventspy.jpg


Recently I was writing an application that used two RichTextBoxes next to each other, and I wanted them to scroll simultaneously, but the Scroll events weren't appearing to fire! After 10 minutes of documentation reading I thought, wouldn't it be better if I had a tool that told me when events fired? That's when I started to research EventSpy.

I started off with a bit of reflection, looping through the events of an object and building and linking a System.EventHandler for every event; this worked, but it threw a nasty error if the event wasn't using a System.EventHandler.

foreach (EventInfo info in t.GetEvents())
   info.AddEventHandler(new System.EventHandler(this.EventHandler));

So then I went onto using a completely different method. For each event in the object, EventSpy using Code DOM to spit out a custom event handler code for each event. This allowed me to also capture specialist EventHandlers such as MouseMoveEventHandler. Once custom event handling code has been spat out by Code DOM, EventSpy then compiles the class in memory, and links it up with the object it is spying on. I found this to be a really nifty solution, as it's still very fast but allows me to see all that's going on with the object.

The Code

EventSpy is implemented as a single DLL. Even though it is implemented as a DLL you should only use EventSpy during development. Unfortunately I could not come up with a good enough way to have EventSpy as a standalone exe, so I did the next best thing, two lines of code. Here is some sample code on how to use EventSpy, this just spies on a very basic class that throws an event. EventSpy can be used on any object, such as a textbox, a button or a custom business class.

public class Dummy
    public delegate void DummyEventHandler(string something);
    public event DummyEventHandler DummyEvent;

    public void RaiseEvent()
        if (DummyEvent != null)
            DummyEvent("Hello World!");

EventSpy.EventListener listener = new EventSpy.EventListener();
Dummy dummy = new Dummy();



After the listener.AttachTo line, the main EventSpy window will pop up, with a list of events that have occurred, and you may filter out events that you don't want to spy on, or view what was passed in the events parameters. Very cool if you ask me, it's saved me loads of time on Windows Forms development.


You may use EventSpy however you like, just give me a bit of credit. If people are interested in helping improve EventSpy, then drop me a line and we could get a SourceForge project going. EventSpy definitely needs a code cleanup, I'll get that done ASAP, I kind of rushed EventSpy so that I could get using it!


  • 2005-09-10 - Original article posted.


This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


About the Author

Martin Carolan

United Kingdom United Kingdom
No Biography provided

Comments and Discussions

QuestionCan it trace event from C++ app control? Pinmemberudomnoke21-Aug-08 6:53 
GeneralLoad the eventSpy in Debug with Late binding PinmemberSuicide204-Jun-07 20:17 
GeneralOther implementation available PinmemberDenisK17-Oct-05 23:17 
GeneralDebug one application from another one Pinmembercanozurdo15-Oct-05 6:44 
GeneralRe: Debug one application from another one PinmemberHarm Salomons23-Oct-05 10:55 
Questionsomething missing? PinmemberHarm Salomons14-Oct-05 12:21 
AnswerRe: something missing? PinsussAnonymous14-Oct-05 13:55 
QuestionI am interested in your project. PinmemberWoo Seok Seo10-Oct-05 0:56 
AnswerRe: I am interested in your project. PinsussAnonymous10-Oct-05 8:47 
GeneralHappy birthday! PinmemberXirius10-Oct-05 21:35 
GeneralRe: Happy birthday! PinmemberMartin Carolan11-Oct-05 6:54 
GeneralThe idea is awesome PinmemberRobert Rohde9-Oct-05 12:40 
GeneralRe: The idea is awesome PinmemberMartin Carolan9-Oct-05 12:42 
GeneralThank you PinmemberMartin Carolan9-Oct-05 11:39 
GeneralRe: Thank you Pinmembermwdiablo9-Oct-05 17:03 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Terms of Use | Mobile
Web03 | 2.8.150414.5 | Last Updated 9 Oct 2005
Article Copyright 2005 by Martin Carolan
Everything else Copyright © CodeProject, 1999-2015
Layout: fixed | fluid