No obtengo el comportamiento que esperaría de un TextBox vinculado a una propiedad entera en un objeto comercial.Cancelar el evento de validación del control de datos no suprime el intento de actualizar el origen de datos
Aquí es lo que hice:
(1) Establecer la DataSourceUpdateMode
, para el cuadro de texto a: OnValidation
.
(2) En el evento Validating
para TextBox, establezca e.Cancel = True
si falla Integer.TryParse.
(3) Agregue un controlador a Binding.Parse
y Binding.BindingComplete
y coloque puntos de interrupción en los controladores.
Ejecute la aplicación, coloque "asdasd" en el TextBox y tab out. A pesar de la configuración e.Cancel = True
, los Parse
y BindingComplete
eventos son ambas elevadas. Según la documentación, el establecimiento de e.Cancel = True
debe suprimir cualquier lógica adicional.
Busqué en MSDN para averiguar por qué sucede esto pero no puedo encontrar nada. ¿Alguien sabe de dónde puedo obtener algunos detalles sobre esto?
ETA: Agregué un identificador para el evento validado también. Aquí está la secuencia de eventos:
datos erróneos:
(1) validar. (I puse e.Cancel = True
)
(2) analizar
(3) BindingComplete
Bueno datos:
(1) Validar
(2) Parse
(3) BindingComplete
(4) Validado
ETA2: Un poco más de información y una solución alternativa.
El problema con este comportamiento es si tiene alguna validación que no está implementada en el conjunto de propiedades.
Por ejemplo, digamos que mi propiedad número entero tiene que ser un número impar. No comprobar esto en la incubadora propiedad, por lo que hago el cheque en caso de validación.
Como puede ver, a partir del comportamiento anterior, el valor, como un número entero legítimo, se escribirá en el origen de datos, incluso si cancelo la validación.
A pesar de que la fuente de datos se actualiza, si establece Cancelar en el evento de validación, el evento Validado no se disparará, por lo que aún puede evitar que el usuario progrese.
trabajo en torno ::
Para detener la actualización fuente de datos, es necesario validar en caso Binding.Parse
, y lanzar una excepción - la cual previene la unión de completar con éxito.
buen encontrar. [Parece un error de winforms] [1]. [1]: http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=490267 –
Saludos, he votado el error y he agregado un trabajo. – Jules