Cómo no validar un control al cerrar formulario

22/09/2003 - 09:24 por Juan | Informe spam
Hola foro.

Perdonad por la simpleza de la pregunta, pero no he podido dar con
niguna solución.

Tengo un TextBox en cuyo evento Validating compruebo que cumpla con
determinados requisitos. Pero, si me cierran el formulario yo quiero que
siempre se cierre, independientemente de que el TextBox contenga algo válido
o no. En estos casos, siempre que le doy a cerrar, me dispara en Validating
del TextBox, entrando en un bucle sin fin ¿Cómo solucionáis esto? Con la
propiedad CausesValidation no hago nada puesto que sí me interesa la
validación del TextBox... pero no si me cierran su formulario.

Muchas gracias.

Preguntas similare

Leer las respuestas

#6 SqlRanger
24/09/2003 - 09:16 | Informe spam
Juan,

El evento validating siempre se dispara antes del evento closing. Sin
embargo cuando en el evento validating pones e.Cancel = True, en el evento
closing e.Cancel también es true.

Yo lo que suelo hacer en el evento Closing es comprobar el varlor de
e.Cancel y si es true mostrar un mensaje diciendo que hay errores en el
formulario y que si quiere cerrarlo de todas maneras. Vamos, sería algo así:

Private Sub TextBox1_Validating(ByVal sender As Object, ByVal e As
System.ComponentModel.CancelEventArgs) Handles TextBox1.Validating
If Me.TextBox1.Text = "" Then
MsgBox("Es obligatorio rellenar este dato")
e.Cancel = True
End If
End Sub


Private Sub Form1_Closing(ByVal sender As Object, ByVal e As
System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
If e.Cancel Then
If MsgBox("Hay errores en el formulario" & vbNewLine & "¿Quieres
cerrarlo de todas formas?", MsgBoxStyle.Question Or MsgBoxStyle.YesNo) MsgBoxResult.Yes Then
e.Cancel = False
End If
End If
End Sub

Ya sé que no queda muy bien que salga un cuadro de mensje diciendo "Es
obligatorio rellenar este dato" y justo después el otro diciendo que hay
errores y que si se quiere cerrar de todas maneras. Lo mejor sería que sólo
saliera un único cuadro de mensaje con toda la información y las opciones.
Por eso te propongo esta otra solución, que no saca cuadros de mensaje en el
validating sino que usa el componente ErrorProvider.

Por un ErrorProvider en el formulario y escribe un código como este:

Public Class Form1
Inherits System.Windows.Forms.Form

Dim MensajeError As String

+ Código generado por el Diseñador de Windows Forms

' etc etc

Private Sub TextBox1_Validating(ByVal sender As Object, ByVal e As
System.ComponentModel.CancelEventArgs) Handles TextBox1.Validating
If Me.TextBox1.Text = "" Then
Me.ErrorProvider1.SetError(Me.TextBox1, "Es obligatorio rellenar
este campo")
Me.MensajeError = "Es obligatorio rellenar el campo 'tal campo'"
e.Cancel = True
Else
Me.ErrorProvider1.SetError(Me.TextBox1, "")
End If
End Sub


Private Sub Form1_Closing(ByVal sender As Object, ByVal e As
System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
If e.Cancel Then
Dim msg As String = "El formulario tiene el siguiente error: " &
vbNewLine
msg += vbNewLine & Me.MensajeError & vbNewLine & vbNewLine
msg += "¿Quieres cerrarlo de todas maneras?"
If MsgBox(msg, MsgBoxStyle.Exclamation Or MsgBoxStyle.YesNo) MsgBoxResult.Yes Then
e.Cancel = False
End If
End If
End Sub
End Class

Espero que esto te sirva para lo que quieres.



Saludos:

Jesús López
MVP Microsoft .NET
MCP SQL Server
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida