Yo una vez estuve en una situación similar, por no decir idéntica. Aunque la solución que le di en ese momento no sé si sea la indicada funcionó sin problemas.
En el botón
Guardar hacía algo así:
Código vb.net:
Ver originalMetodoGuardarDatos()
'Acá cerraba el formulario con un Me.Close()
'Para que no afecte al evento Form_Closing uso el Dispose XD
Me.Dispose() 'Destruye al formulario de la memoria, obviamente cerrándolo.
Luego en el evento
Form_Closing usando la propiedad
CloseReason hago lo sgte:
Código vb.net:
Ver originalIf e.CloseReason = CloseReason.UserClosing Then
MessageBox.Show("¿Desea guardar los cambios?")
End If
Con esto mostrarás ese mensaje cuando el usuario haga click en la X del form o se llame al método
Close()
Cuando implementé esta "solución"
-que no me gusta mucho- era mucho más novato de lo que soy ahora, supongo que alguien podrá encontrar una solución más "limpia" por así decirlo.
Espero te sirva