El evento es provocado por el código de plomería de Winforms. La única forma en que puede ver que el controlador de eventos personalizado desea alterar el comportamiento predeterminado es a través del objeto e
. Crear un nuevo objeto CancelEventArgs no tiene efectos secundarios que la plomería pueda detectar.
Hay algo más erróneo, los eventos se generan para el beneficio del código externo, lo que le permite saber qué está pasando y le da una opción para modificar el comportamiento. No hay código externo aquí, el controlador de eventos es en realidad parte de la misma clase que plantea el evento. En otras palabras, la forma es escuchar sus propios eventos. Hay una manera mucho mejor de lidiar con eso, usted anula el método que plantea el evento. De esta manera:
protected override void OnFormClosing(FormClosingEventArgs e) {
e.Cancel = true;
base.OnFormClosing(e);
}
código Ahora externa puede anular el comportamiento por defecto, los eventos se elevó después el método OnXxxx corre. Y tiene una opción, si no desea que el código externo anule el comportamiento, simplemente cambie las dos declaraciones.
Porque una es la manera correcta de cancelar un evento de cierre de formulario, y la otra es basura total. – Jamiec
@Jamiec: "Total de basura" no es muy descriptivo y, por lo tanto, no es muy útil. Sin una comprensión de la instanciación de objetos, es muy fácil ver cómo se puede confundir aquí. Estoy de acuerdo en que la explicación es simple, pero no es tan simple como "basura total". –