Teniendo en cuenta que ha especificado quieres un error emergente de diálogo, una forma de hacer esto es para mover su validación en un controlador de OnClosing
evento. En este ejemplo, el formulario cerrar se cancela si el usuario responde afirmativamente a la pregunta en el cuadro de diálogo.
private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
// Determine if text has changed in the textbox by comparing to original text.
if (textBox1.Text != strMyOriginalText)
{
// Display a MsgBox asking the user to save changes or abort.
if(MessageBox.Show("Do you want to save changes to your text?", "My Application",
MessageBoxButtons.YesNo) == DialogResult.Yes)
{
// Cancel the Closing event from closing the form.
e.Cancel = true;
// Call method to save file...
}
}
}
Al establecer e.Cancel = true
evitará que se cierre el formulario.
Sin embargo, sería una mejor experiencia de diseño/usuario para mostrar los errores de validación en línea (a través destacando los campos ofensivos de alguna manera, que muestra información sobre herramientas, etc.) y evitar que el usuario seleccione el botón OK en El primer lugar.
que funcionaría ... pero sería una práctica horrible de UI. OP ya ha mostrado un diálogo, ¡y luego arroja otro! Es mucho mejor usar las técnicas de validación de winform existentes. Deshabilitar el botón "Aceptar". – Adrian
@Adrian. Dije "unidireccional";). Todo dependería de la probabilidad y/o gravedad del error. Tendría que ver el diseño del formulario antes de tomar una decisión final. – ChrisF
estoy de acuerdo y acabo de leer el OP de nuevo y vi que quería un diálogo HORRIBLE para aparecer. – Adrian