A delegate is the .Net equivalent of a function pointer. Basically it describes a function/method to be called (return type, parameters count, and parameter types) without actually being a function - sort of a prototype of a function/method. These allow your code to be able to describe a function without actually knowing what the function's name is or what it does. All that it needs is the same return type, parameter count, and parameter types. This is similar to what an interface does for classes, only it's an 'interface' for methods/functions.
An Event is a special type of delegate that allows object(s) to subscribe to it. When a condition is met, the event is called and the method executed. EventHandlers are used to subscribe to events - an event can have unlimited subscribers, and an EventHandler can subscribe to unlimited events. I can't really explain this much better than any event-driven programming .Net tutorial off google could do, unfortunately.