2008-11-19 15 views
5

Bonjour,validation Textbox, focus Numéro de commutation

Je travaille sur une application C# Winform qui utilise la validation des commandes. Le problème que j'ai est que quand un utilisateur clique dans une zone de texte et tente de cliquer sur, la validation déclenche et recentre le contrôle, fondamentalement l'utilisateur ne peut pas cliquer sur le contrôle à un autre contrôle.

Mon résultat souhaité est que TOUS les contrôles du formulaire soient validés lorsque l'utilisateur clique sur le bouton d'envoi. Je voudrais que l'icône errorProvider apparaisse à côté des champs qui sont en erreur et permette à l'utilisateur de les corriger comme bon leur semble.

Ma question est, comment puis-je configurer un contrôle pour permettre à un utilisateur de cliquer à l'extérieur lorsqu'il y a une erreur. J'aimerais que l'utilisateur ait la possibilité de remplir le reste du formulaire et de revenir à l'erreur par lui-même au lieu d'être obligé de le traiter immédiatement.

Nous vous remercions d'avance pour toute aide et des conseils,

Répondre

2

La façon la plus simple serait juste de mettre toute la validation dans le gestionnaire de bouton Soumettre, au lieu de l'avoir dans les contrôles.

-1

Il existe une propriété (je pense que c'est sur le formulaire) qui vous permet de vous déplacer entre les champs lorsque la validation échoue. Je ne me souviens pas comment ça s'appelle, mais je pense que c'est nommé de façon assez descriptive.

+0

Il existe la propriété CausesValidation que vous définissez sur le contrôle cible, mais vous devez la définir sur false pour * tout *. Simpler juste pour éviter tout le mécanisme, IMO. –

+0

Peut-être que c'est ça - pour être juste, nous faisons habituellement notre propre validation sur les clics de bouton ... –

2

nous avons une fonction de validation qui renvoie bool si le formulaire est valide et définit tous les fournisseurs d'erreur sur le formulaire:

ressemble à ceci:

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

La forme a la propriété AutoValidate, qui peut être défini pour autoriser le changement de focus

+1

Vous monsieur, êtes un érudit et un gentleman. Il ne m'est même pas venu à l'esprit de vérifier les propriétés du niveau de formulaire car je pensais que ce serait soit le fournisseur d'erreur, soit le contrôle validable. – Colton

5

La propriété de formulaire est "AutoValidate" et affecte tous les contrôles du formulaire. C'est une énumération Définissez-le sur System.Windows.Forms.AutoValidate.EnableAllowFocusChange pour permettre à l'utilisateur de quitter un contrôle dont la validation a échoué, tout en affichant l'icône d'erreur qui permet à l'utilisateur de récupérer l'info-bulle d'erreur.

La propriété "CausesValidation" du contrôle est un booléen. Si c'est vrai, le contrôle déclenche l'événement de validation qui déclenche errorProvider. C'est faux, tout est contourné, l'utilisateur peut quitter le contrôle, mais il n'y a pas d'icône d'erreur ou d'info-bulle.