2008-11-19 14 views
5

Buenos días,Validación de cuadro de texto, problema de cambio de enfoque

Estoy trabajando en una aplicación de formato C# que utiliza la validación de los controles. El problema que tengo es que cuando un usuario hace clic en un cuadro de texto e intenta hacer clic, la validación dispara y vuelve a enfocar el control; básicamente, el usuario no puede hacer clic fuera del control en otro control.

Mi resultado deseado es que TODOS los controles en el formulario se validan cuando el usuario hace clic en el botón Enviar. Me gustaría que el ícono errorProvider aparezca junto a los campos que tienen errores y permita al usuario corregirlos como lo considere oportuno.

Mi pregunta es, ¿cómo configuro un control para permitir que un usuario haga clic fuera de él cuando hay un error? Me gustaría que el usuario tenga la capacidad de completar el resto del formulario y volver al error por sí mismo en lugar de tener que lidiar con él de inmediato.

Gracias de antemano por cualquier ayuda y consejo,

Respuesta

2

La forma más sencilla sería justo poner toda la validación del controlador de botón Enviar, en lugar de tener que en los controles.

-1

Hay una propiedad (creo que está en el formulario) que le permite moverse entre los campos cuando falla la validación. No recuerdo cómo se llama, pero creo que se llama bastante descriptiva.

+0

Existe la propiedad CausesValidation, que creo que configura en el control de destino, pero tendría que establecerlo en falso para * todo *. Más simple solo para evitar todo el mecanismo, IMO. –

+0

Tal vez sea eso, para ser justos, usualmente hacemos nuestra propia validación con los clics de los botones ... –

2

que tienen una función de validación que devuelve bool si el formulario es válido y establece todos los proveedores de error en el formulario:

se ve así:

private void OnSave() 
    { 
     if(ValidateData()) 
     { 
     //do save 
     } 
    } 

    public bool ValidateData() 
    { 
     errorProvider.Clear(); 
     bool valid = true; 
     if (this.defectStatusComboBox.SelectedIndex == -1) 
     { 
      errorProvider.SetError(defectStatusComboBox, "This is a required feild."); 
      valid = false; 
     } 
     //etc... 
     return valid; 
    } 
23

El formulario tiene la propiedad AutoValidate, que puede se configura para permitir el cambio de foco

+1

Usted señor, es un erudito y un caballero. Ni siquiera se me ocurrió verificar las propiedades del nivel de formulario porque pensaba que sería el proveedor de error o el control validable – Colton

5

La propiedad del formulario es "Validar automáticamente" y afecta a todos los controles del formulario. Es una enumeración; establézcalo en System.Windows.Forms.AutoValidate.EnableAllowFocusChange para permitir que el usuario salga de un control que no aprobó la validación, pero aún muestra el icono de error que permite al usuario obtener información sobre herramientas de error.

La propiedad de control "CausesValidation" es un booleano. Si es cierto, el control genera el evento de validación que desencadena el errorProvider. Es falso, todo se pasa por alto, el usuario puede salir del control, pero no hay ningún icono de error o información sobre herramientas.

Cuestiones relacionadas