Q:

¿Como se disparan los eventos en C#?

Pasando por EVENTOS y DELEGADOS en C#, me encuentro con el evento Click en casi todos los controles, deseo hacer un evento personalizado, he tratado de ver la definicion del evento "CLICK".
Entiendo que la siguiente linea invoca al delegado y hace referencia al metodo que se encuentra entre parentesis y ese metodo es lo que se debe hacer cuando se dispare el evento, lo que no entiendo cual es el metodo o donde se encuentra la definicion que dice cuando se dispara el evento.
Espero me puedan ayudar a entender mas sobre el tema y realizar mi evento personalizado.
this.btnAceptar.Click += new System.EventHandler(this.btnAceptar_Click);

A:

Tu pregunta mezcla un par de cosas.
Por un lado, parece que no entiendes en que momento y desde donde se dispara el evento. Para estos casos, es muy útil conocer que el código fuente de C# es código abierto y está disponible para consulta.
Si miramos el código fuente de Button, vemos lo siguiente:
protected override void OnClick(EventArgs e) {
    Form form = FindFormInternal();
    if (form != null) form.DialogResult = dialogResult;

    // accessibility stuff
    //
    AccessibilityNotifyClients(AccessibleEvents.StateChange, -1);
    AccessibilityNotifyClients(AccessibleEvents.NameChange, -1);

    base.OnClick(e);
}

Como podemos ver, OnClick esta sobreescribiendo el Método OnClick de la clase base. Si nos vamos a la definición,ésta es:
public class Button : ButtonBase, IButtonControl 

En ButtonBase encontramos los siguiente:
protected override void WndProc(ref Message m) {

        switch (m.Msg) {
            // NDPWhidbey 28043 -- we don't respect this because the code below eats BM_SETSTATE.
            // so we just invoke the click.
            //
            case NativeMethods.BM_CLICK:
                if (this is IButtonControl) {
                    ((IButtonControl)this).PerformClick();
                }
                else {
                    OnClick(EventArgs.Empty);
                }
                return;
        }
       ...

Es decir, se llama al evento OnClick cuando se recibe el mensaje del sistema de mensajes de windows BM_CLICK (entiendo que es un mensaje que se lanza al detectar al pulsación de un botón).
La clase base de ButtonBase es Control:
public abstract class ButtonBase : Control 

Si vamos a ella, por fin encontramos la definición del evento y el manejador:
private static readonly object EventClick = new object();

...
public event EventHandler Click {
    add {
        Events.AddHandler(EventClick, value);
    }
    remove {
        Events.RemoveHandler(EventClick, value);
    }
}

Como verás, no has escogido un ejemplo muy sencillo si querías ver como generar un evento personalizado. Esto en realidad es muy sencillo en su caso más básico. Primero, se define el evento:
public event EventHandler MiEvento;

Luego, cuando quieras lanzarlo, simplemente compruebas que exista y lo llamas:
if (this.MiEvento!= null)
    this.MiEvento(this, null);   

Los parámetros son el sender (la clase que está lanzando el evento) y los parámetros. En este ejemplo no mando parámetros, se pueden mandar cualquier tipo de parámetros pero explicar como definirles haría esta respuesta más larga de lo que ya es.
Para recibir el evento en otra clase, simplemente debes subscribirte a el y crear el manejador que lo recibirá:
ObjetoDeLaClaseQueDefineElEvento.MiEvento += new EventHandler(ObjetoDeLaClaseQueDefineElEvento_MiEvento);
...
protected void ObjetoDeLaClaseQueDefineElEvento_MiEvento(object sender, EventArgs e)
{
    //manejar el evento
}

Espero que esta (demasiado extensa) respuesta te haya aclarado un poco el tema.

