Form_Load () ‘event’ o Override OnLoad ()

Me gustaría que alguien lo intente y explique la diferencia entre estos. Más específicamente, ejemplos de escenarios de uso.

Estoy refactorizando algún código de Windows Form y un Form tiene algún código en el evento Form_Load() y también en un evento protected override void OnLoad() que llama a base.OnLoad(e); Ahora lo rastreé y el Override se dispara primero y luego se dispara inmediatamente la versión del evento.

Entonces, ¿cuál se usa normalmente y por qué?

Siempre debe anular OnLoad (). Usar el evento solo es apropiado cuando otra clase estaría interesada en el evento. Para qué son los eventos. Otra clase interesada en el evento Load es muy rara, solo muy útil para hacer arreglos de ventanas.

Aún así, el evento Load funciona bien con el diseñador y los progtwigdores de VB6 están muy cómodos con él. No es terriblemente incorrecto, solo te meterías en problemas cuando comiences a heredar el formulario y el código no se ejecute en el orden correcto.

La mayoría del código que ahora se pone en el evento Load realmente pertenece al constructor. Solo necesita OnLoad si:

  • Necesita saber el tamaño exacto y la posición de la ventana. Lo mejor es OnLoad, se crea el identificador de ventana y se aplican las preferencias del usuario (tamaño de título y borde) y el formulario se volvió a escalar como lo indica la propiedad Form.AutoScaleMode. La ventana aún no está visible, es un buen momento para mover la ventana a otra parte o para organizar los controles secundarios.
  • Tiene un código que necesita la propiedad Manejar. Esto es sutil, no siempre se puede decir. Tener un código como ese en el constructor no es saludable, la ventana se crea antes de que se complete el constructor. Por lo general, llega a un buen final, pero puede hacer que la creación de la forma sea muy lenta. Fácil de diagnosticar desde la ventana Pila de llamadas.
  • Para evitar un error en la implementación de MDI. Si crea un elemento secundario MDI en el constructor padre, obtendrá glifos duplicados, visibles cuando maximice el elemento secundario. Cree el hijo en OnLoad en su lugar.

Al anular OnLoad , la llamada a base.OnLoad invoca el evento Load -event of the Form.

 protected override void OnLoad(EventArgs e) { // do stuff before Load-event is raised base.OnLoad(e); // do stuff after Load-event was raised } 

Si no necesita realizar específicamente nada antes de que se OnLoad Load-event, colocar el código en OnLoad después de base.OnLoad(e) proporciona el mismo comportamiento de tiempo de ejecución que colocarlo en el controlador de eventos Form_Load .

Recomiendo anular el método en lugar de suscribirse al evento.

OnLoad levanta el evento Load , que maneja Form_Load . Vea el artículo de MSDN .

Entonces, en su código, al final de su función de inicialización, puede llamar a la función OnLoad . La clase base llamará a los controladores de eventos ( Form_Load en este caso), que puede haber configurado en su código de inicialización.

Personalmente, coloque mi código en Form_Init y dejo OnLoad para iniciar el evento, ya que estoy manejando el evento, aunque puedes defenderlo por un buen motivo, como puedes ver en tus respuestas.