2017-10-09 2 views
0

J'ai 5 contrôles dans mon formulaire qui doit être validé si la valeur est vide, alors il affichera une info-bulle ballon. Toutefois, dans mes tests, le code affichera l'info-bulle dans tous les contrôles vides.Comment ne tirer qu'une seule instance de la validation des contrôles?

The error message says "Please fill the empty field"

Je voudrais faire l'infobulle seul point au premier ou au dernier contrôle vide sous la forme.

Existe-t-il un moyen de déclencher une seule instance à partir de toutes les validations?

+1

Vous auriez sans doute de garder un compte ou d'un drapeau pour indiquer si une pointe a déjà été affiché. – jmcilhinney

+0

C'est logique, je pense que c'est une façon de faire. Merci –

+0

Je pense que cela pourrait être un peu plus complexe que ça, maintenant que j'y pense. C'est parce que vous auriez à savoir quand décrémenter le compte ou réinitialiser le drapeau, ce que vous n'auriez pas vraiment la capacité de faire. Je pense qu'une meilleure idée pourrait être d'avoir un champ de type 'Control' et vous pouvez lui assigner un contrôle quand vous montrez un tip sur ce contrôle. Ainsi, lorsqu'un contrôle réussit la validation, vous savez si vous souhaitez effacer ce champ ou non car vous pouvez le comparer au contrôle qui vient de passer la validation. Je pense que je pourrais transformer cela en une réponse. – jmcilhinney

Répondre

1

Voici un exemple du genre de chose que je prévois:

Private controlShowingValidationTip As Control 

Private Sub TextBoxes_Validating(sender As Object, e As CancelEventArgs) Handles TextBox3.Validating, 
                       TextBox2.Validating, 
                       TextBox1.Validating 
    Dim ctl = DirectCast(sender, Control) 

    If ctl.Text = String.Empty Then 
     'The control has failed validation. 
     e.Cancel = True 

     If controlShowingValidationTip Is Nothing OrElse controlShowingValidationTip Is ctl Then 
      'Display the validation error tip for this control here. 

      controlShowingValidationTip = ctl 
     End If 
    ElseIf controlShowingValidationTip Is ctl Then 
     'This control was showing a validation error tip but has passed validation so clear the tip. 

     controlShowingValidationTip = Nothing 
    End If 
End Sub