Bonjour,
J'ai une procédure dans un formulaire de type
Private Sub myField_Validate(cancel As Boolean)
... controle des données saisies
...et dans certains cas message d'erreur
Cancel = True
end sub
Dans ce cas la valeur saisie est effacée et le curseur se
repositionne sur le champ.
Mais si je veux écrire une procédure Public en passant comme paramètre
myField comment faire pour le Cancel = True ?
J'ai essayé en testant le résultat du style if... then Cancel = True
mais ça ne fonctionne pas
Bonjour,
J'ai une procédure dans un formulaire de type
Private Sub myField_Validate(cancel As Boolean)
... controle des données saisies
...et dans certains cas message d'erreur
Cancel = True
end sub
Dans ce cas la valeur saisie est effacée et le curseur se
repositionne sur le champ.
Mais si je veux écrire une procédure Public en passant comme paramètre
myField comment faire pour le Cancel = True ?
J'ai essayé en testant le résultat du style if... then Cancel = True
mais ça ne fonctionne pas
Bonjour,
J'ai une procédure dans un formulaire de type
Private Sub myField_Validate(cancel As Boolean)
... controle des données saisies
...et dans certains cas message d'erreur
Cancel = True
end sub
Dans ce cas la valeur saisie est effacée et le curseur se
repositionne sur le champ.
Mais si je veux écrire une procédure Public en passant comme paramètre
myField comment faire pour le Cancel = True ?
J'ai essayé en testant le résultat du style if... then Cancel = True
mais ça ne fonctionne pas
Dans : news:%,
jerome disait :
> Bonjour,
Bonjour,
> J'ai une procédure dans un formulaire de type
>
> Private Sub myField_Validate(cancel As Boolean)
>
> ... controle des données saisies
> ...et dans certains cas message d'erreur
> Cancel = True
>
> end sub
>
> Dans ce cas la valeur saisie est effacée et le curseur se
> repositionne sur le champ.
>
> Mais si je veux écrire une procédure Public en passant comme paramètre
> myField comment faire pour le Cancel = True ?
> J'ai essayé en testant le résultat du style if... then Cancel = True
> mais ça ne fonctionne pas
De mémoire, VB6 ne permet pas de faire ce que tu veux.
La procédure myField_Validate est automatiquement attachée à l'évènement
Validate du contrôle myField par le compilateur en fonction de son nom.
Peut être une solution en procédant de la manière suivante :
Private Sub myField_Validate(cancel as Boolean)
my_Validate(myField, cancel)
End Sub
Private Sub my_Validate(ctl as Control, cancel as Boolean)
'.......
End Sub
Il faudra tout de même avoir une procédure Validate par contrôle (sauf à
utiliser des tableaux de contrôle).
Pourquoi la procédure de traitement générique doit-elle être publique ?
C'est nécessaire pour l'appeler de l'extérieur mais, en général, on
n'appelle pas une procédure de gestion d'évènement.
Dans : news:%23crr2FkGIHA.2328@TK2MSFTNGP03.phx.gbl,
jerome disait :
> Bonjour,
Bonjour,
> J'ai une procédure dans un formulaire de type
>
> Private Sub myField_Validate(cancel As Boolean)
>
> ... controle des données saisies
> ...et dans certains cas message d'erreur
> Cancel = True
>
> end sub
>
> Dans ce cas la valeur saisie est effacée et le curseur se
> repositionne sur le champ.
>
> Mais si je veux écrire une procédure Public en passant comme paramètre
> myField comment faire pour le Cancel = True ?
> J'ai essayé en testant le résultat du style if... then Cancel = True
> mais ça ne fonctionne pas
De mémoire, VB6 ne permet pas de faire ce que tu veux.
La procédure myField_Validate est automatiquement attachée à l'évènement
Validate du contrôle myField par le compilateur en fonction de son nom.
Peut être une solution en procédant de la manière suivante :
Private Sub myField_Validate(cancel as Boolean)
my_Validate(myField, cancel)
End Sub
Private Sub my_Validate(ctl as Control, cancel as Boolean)
'.......
End Sub
Il faudra tout de même avoir une procédure Validate par contrôle (sauf à
utiliser des tableaux de contrôle).
Pourquoi la procédure de traitement générique doit-elle être publique ?
C'est nécessaire pour l'appeler de l'extérieur mais, en général, on
n'appelle pas une procédure de gestion d'évènement.
Dans : news:%,
jerome disait :
> Bonjour,
Bonjour,
> J'ai une procédure dans un formulaire de type
>
> Private Sub myField_Validate(cancel As Boolean)
>
> ... controle des données saisies
> ...et dans certains cas message d'erreur
> Cancel = True
>
> end sub
>
> Dans ce cas la valeur saisie est effacée et le curseur se
> repositionne sur le champ.
>
> Mais si je veux écrire une procédure Public en passant comme paramètre
> myField comment faire pour le Cancel = True ?
> J'ai essayé en testant le résultat du style if... then Cancel = True
> mais ça ne fonctionne pas
De mémoire, VB6 ne permet pas de faire ce que tu veux.
La procédure myField_Validate est automatiquement attachée à l'évènement
Validate du contrôle myField par le compilateur en fonction de son nom.
Peut être une solution en procédant de la manière suivante :
Private Sub myField_Validate(cancel as Boolean)
my_Validate(myField, cancel)
End Sub
Private Sub my_Validate(ctl as Control, cancel as Boolean)
'.......
End Sub
Il faudra tout de même avoir une procédure Validate par contrôle (sauf à
utiliser des tableaux de contrôle).
Pourquoi la procédure de traitement générique doit-elle être publique ?
C'est nécessaire pour l'appeler de l'extérieur mais, en général, on
n'appelle pas une procédure de gestion d'évènement.
La procédure de traitement est déclarée publique car le traitement en
question contrôle la validité de saisie de dates (format de saisie,
bornes de saisies, etc, etc...)
Et comme elle est appelée dans plusieurs formulaires je souhaiterais
une fonction publique dans laquelle je passe juste le paramètre
Me.ActiveControl.Text et qu'ensuite les contrôles soient effectués.
Avec le Cancel = true en cas de saisie incorrecte .
La procédure de traitement est déclarée publique car le traitement en
question contrôle la validité de saisie de dates (format de saisie,
bornes de saisies, etc, etc...)
Et comme elle est appelée dans plusieurs formulaires je souhaiterais
une fonction publique dans laquelle je passe juste le paramètre
Me.ActiveControl.Text et qu'ensuite les contrôles soient effectués.
Avec le Cancel = true en cas de saisie incorrecte .
La procédure de traitement est déclarée publique car le traitement en
question contrôle la validité de saisie de dates (format de saisie,
bornes de saisies, etc, etc...)
Et comme elle est appelée dans plusieurs formulaires je souhaiterais
une fonction publique dans laquelle je passe juste le paramètre
Me.ActiveControl.Text et qu'ensuite les contrôles soient effectués.
Avec le Cancel = true en cas de saisie incorrecte .
Dans : news:,
jerome disait :
> La procédure de traitement est déclarée publique car le traitement en
> question contrôle la validité de saisie de dates (format de saisie,
> bornes de saisies, etc, etc...)
> Et comme elle est appelée dans plusieurs formulaires je souhaiterais
> une fonction publique dans laquelle je passe juste le paramètre
> Me.ActiveControl.Text et qu'ensuite les contrôles soient effectués.
> Avec le Cancel = true en cas de saisie incorrecte .
Si nous sommes bien d'accord que c'est l'évènement Validate de chacun
des contrôles qui appelle ce contrôle de validité alors la solution que
j'ai proposée devrait faire l'affaire (en Public plutôt que Private dans
ce cas).
Il n'y a en effet que dans ce cas que le booléen Cancel sera pris en
compte.
--
Dans : news:Og4adMtGIHA.5228@TK2MSFTNGP05.phx.gbl,
jerome disait :
> La procédure de traitement est déclarée publique car le traitement en
> question contrôle la validité de saisie de dates (format de saisie,
> bornes de saisies, etc, etc...)
> Et comme elle est appelée dans plusieurs formulaires je souhaiterais
> une fonction publique dans laquelle je passe juste le paramètre
> Me.ActiveControl.Text et qu'ensuite les contrôles soient effectués.
> Avec le Cancel = true en cas de saisie incorrecte .
Si nous sommes bien d'accord que c'est l'évènement Validate de chacun
des contrôles qui appelle ce contrôle de validité alors la solution que
j'ai proposée devrait faire l'affaire (en Public plutôt que Private dans
ce cas).
Il n'y a en effet que dans ce cas que le booléen Cancel sera pris en
compte.
--
Dans : news:,
jerome disait :
> La procédure de traitement est déclarée publique car le traitement en
> question contrôle la validité de saisie de dates (format de saisie,
> bornes de saisies, etc, etc...)
> Et comme elle est appelée dans plusieurs formulaires je souhaiterais
> une fonction publique dans laquelle je passe juste le paramètre
> Me.ActiveControl.Text et qu'ensuite les contrôles soient effectués.
> Avec le Cancel = true en cas de saisie incorrecte .
Si nous sommes bien d'accord que c'est l'évènement Validate de chacun
des contrôles qui appelle ce contrôle de validité alors la solution que
j'ai proposée devrait faire l'affaire (en Public plutôt que Private dans
ce cas).
Il n'y a en effet que dans ce cas que le booléen Cancel sera pris en
compte.
--
> Bonjour,
J'avoue ne pas réussir à écrire la procédure. Selon mes différents essais,
j'ai divers messages d'erreur.
Ce que je souhaite faire, par exemple c'est
> Bonjour,
J'avoue ne pas réussir à écrire la procédure. Selon mes différents essais,
j'ai divers messages d'erreur.
Ce que je souhaite faire, par exemple c'est
> Bonjour,
J'avoue ne pas réussir à écrire la procédure. Selon mes différents essais,
j'ai divers messages d'erreur.
Ce que je souhaite faire, par exemple c'est
J'ai un message d'erreur sur le my_Validate (myField, cancel)
"Erreur de compilation
Attendu : ="
J'ai un message d'erreur sur le my_Validate (myField, cancel)
"Erreur de compilation
Attendu : ="
J'ai un message d'erreur sur le my_Validate (myField, cancel)
"Erreur de compilation
Attendu : ="
Bonjour,
J'avoue ne pas réussir à écrire la procédure. Selon mes différents
essais,
j'ai divers messages d'erreur.
Ce que je souhaite faire, par exemple c'est
<snip>
Hello,
Rien de compliqué à priori.
Il n'est nul besoin de balader le Cancel puisque
le but est de vérifier une condition puis en
fonction de cette condition de prendre une décision
localement.
L'idée est donc dans Validate() d'appeler une fonction
de vérification (externe et autonome) et de prendre
la décision *localement* (et donc de changer le
cancel *localement* aussi).
Tu écris donc ceci: (text1) est le champ de type date à vérifier:
Private Sub Text1_Validate(Cancel As Boolean)
Dim s As String
Dim ret As Boolean
s = Text1.Text
ret = checkDate(s)
If ret Then
' tout va bien, la date est "valide"
Text1.Text = Format$(s, "dd/mm/yyyy")
Else
' probleme, date invalide
MsgBox "Date Invalide"
Text1.Text = ""
Cancel = True
End If
End Sub
Private Function checkDate(ByVal aDate As String) As Boolean
If CDate(aDate) > CDate(Now) Then
checkDate = False
Else
checkDate = True
End If
End Function
Et voila, ça marche et ça fait exactement ce que tu souhaites.
Qui plus est ce design est bon, car tu as écrit une fonction
booléeene CheckDate() qui fait uniquement ce qu'elle doit
faire, qui est réutilisable et *surtout* qui est indépendante
de l'interface (règle N°1 : pas de couplage fonction/interface).
Espérabt que cela t'aide,
Cordialement,
--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;
Bonjour,
J'avoue ne pas réussir à écrire la procédure. Selon mes différents
essais,
j'ai divers messages d'erreur.
Ce que je souhaite faire, par exemple c'est
<snip>
Hello,
Rien de compliqué à priori.
Il n'est nul besoin de balader le Cancel puisque
le but est de vérifier une condition puis en
fonction de cette condition de prendre une décision
localement.
L'idée est donc dans Validate() d'appeler une fonction
de vérification (externe et autonome) et de prendre
la décision *localement* (et donc de changer le
cancel *localement* aussi).
Tu écris donc ceci: (text1) est le champ de type date à vérifier:
Private Sub Text1_Validate(Cancel As Boolean)
Dim s As String
Dim ret As Boolean
s = Text1.Text
ret = checkDate(s)
If ret Then
' tout va bien, la date est "valide"
Text1.Text = Format$(s, "dd/mm/yyyy")
Else
' probleme, date invalide
MsgBox "Date Invalide"
Text1.Text = ""
Cancel = True
End If
End Sub
Private Function checkDate(ByVal aDate As String) As Boolean
If CDate(aDate) > CDate(Now) Then
checkDate = False
Else
checkDate = True
End If
End Function
Et voila, ça marche et ça fait exactement ce que tu souhaites.
Qui plus est ce design est bon, car tu as écrit une fonction
booléeene CheckDate() qui fait uniquement ce qu'elle doit
faire, qui est réutilisable et *surtout* qui est indépendante
de l'interface (règle N°1 : pas de couplage fonction/interface).
Espérabt que cela t'aide,
Cordialement,
--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ; _no_spam_jean_marc_n2@yahoo.fr
Bonjour,
J'avoue ne pas réussir à écrire la procédure. Selon mes différents
essais,
j'ai divers messages d'erreur.
Ce que je souhaite faire, par exemple c'est
<snip>
Hello,
Rien de compliqué à priori.
Il n'est nul besoin de balader le Cancel puisque
le but est de vérifier une condition puis en
fonction de cette condition de prendre une décision
localement.
L'idée est donc dans Validate() d'appeler une fonction
de vérification (externe et autonome) et de prendre
la décision *localement* (et donc de changer le
cancel *localement* aussi).
Tu écris donc ceci: (text1) est le champ de type date à vérifier:
Private Sub Text1_Validate(Cancel As Boolean)
Dim s As String
Dim ret As Boolean
s = Text1.Text
ret = checkDate(s)
If ret Then
' tout va bien, la date est "valide"
Text1.Text = Format$(s, "dd/mm/yyyy")
Else
' probleme, date invalide
MsgBox "Date Invalide"
Text1.Text = ""
Cancel = True
End If
End Sub
Private Function checkDate(ByVal aDate As String) As Boolean
If CDate(aDate) > CDate(Now) Then
checkDate = False
Else
checkDate = True
End If
End Function
Et voila, ça marche et ça fait exactement ce que tu souhaites.
Qui plus est ce design est bon, car tu as écrit une fonction
booléeene CheckDate() qui fait uniquement ce qu'elle doit
faire, qui est réutilisable et *surtout* qui est indépendante
de l'interface (règle N°1 : pas de couplage fonction/interface).
Espérabt que cela t'aide,
Cordialement,
--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;
Jean Marc ne crois-tu pas que l'écriture suivante permettrait une
affectation de cancel plus dans l'esprit du traitement ?
Private Sub Text1_Validate(Cancel As Boolean)
Dim s As String
'Dim ret As Boolean
s = Text1.Text
cancel = not(checkDate(s))
If cancel Then
' probleme, date invalide
MsgBox "Date Invalide"
Text1.Text = ""
Else
' tout va bien, la date est "valide"
Text1.Text = Format$(s, "dd/mm/yyyy")
End If
--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;
Jean Marc ne crois-tu pas que l'écriture suivante permettrait une
affectation de cancel plus dans l'esprit du traitement ?
Private Sub Text1_Validate(Cancel As Boolean)
Dim s As String
'Dim ret As Boolean
s = Text1.Text
cancel = not(checkDate(s))
If cancel Then
' probleme, date invalide
MsgBox "Date Invalide"
Text1.Text = ""
Else
' tout va bien, la date est "valide"
Text1.Text = Format$(s, "dd/mm/yyyy")
End If
--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ; _no_spam_jean_marc_n2@yahoo.fr
Jean Marc ne crois-tu pas que l'écriture suivante permettrait une
affectation de cancel plus dans l'esprit du traitement ?
Private Sub Text1_Validate(Cancel As Boolean)
Dim s As String
'Dim ret As Boolean
s = Text1.Text
cancel = not(checkDate(s))
If cancel Then
' probleme, date invalide
MsgBox "Date Invalide"
Text1.Text = ""
Else
' tout va bien, la date est "valide"
Text1.Text = Format$(s, "dd/mm/yyyy")
End If
--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;
Dans : news:OHD$,
jerome disait :
> J'ai un message d'erreur sur le my_Validate (myField, cancel)
> "Erreur de compilation
> Attendu : ="
Oui, ça c'est parce que j'ai oublié qu'on ne met pas de parenthèses pour
un appel de procédure !!
Je vois la solution de Jean-Marc qui suggère à raison de découpler
interface et fonction.
Si j'ai bien compris ton problème, ta solution est un composé de nos
deux solutions. Tu mutualises ta procédure évènementielle comme je l'ai
écrit (mais sans les parenthèses :-) ). Et tu prends soin de décomposer
ton traitement pour ne pas mélanger les MsgBox avec des instructions de
vérification de la cohérence des données.
--
Fred
http://www.cerber mail.com/?3kA6ftaCvT (enlever l'espace)
Dans : news:OHD$FW7GIHA.4112@TK2MSFTNGP05.phx.gbl,
jerome disait :
> J'ai un message d'erreur sur le my_Validate (myField, cancel)
> "Erreur de compilation
> Attendu : ="
Oui, ça c'est parce que j'ai oublié qu'on ne met pas de parenthèses pour
un appel de procédure !!
Je vois la solution de Jean-Marc qui suggère à raison de découpler
interface et fonction.
Si j'ai bien compris ton problème, ta solution est un composé de nos
deux solutions. Tu mutualises ta procédure évènementielle comme je l'ai
écrit (mais sans les parenthèses :-) ). Et tu prends soin de décomposer
ton traitement pour ne pas mélanger les MsgBox avec des instructions de
vérification de la cohérence des données.
--
Fred
http://www.cerber mail.com/?3kA6ftaCvT (enlever l'espace)
Dans : news:OHD$,
jerome disait :
> J'ai un message d'erreur sur le my_Validate (myField, cancel)
> "Erreur de compilation
> Attendu : ="
Oui, ça c'est parce que j'ai oublié qu'on ne met pas de parenthèses pour
un appel de procédure !!
Je vois la solution de Jean-Marc qui suggère à raison de découpler
interface et fonction.
Si j'ai bien compris ton problème, ta solution est un composé de nos
deux solutions. Tu mutualises ta procédure évènementielle comme je l'ai
écrit (mais sans les parenthèses :-) ). Et tu prends soin de décomposer
ton traitement pour ne pas mélanger les MsgBox avec des instructions de
vérification de la cohérence des données.
--
Fred
http://www.cerber mail.com/?3kA6ftaCvT (enlever l'espace)