Passer un textbox en argument

DerWanderer Messages postés 9 Date d'inscription lundi 26 juin 2006 Statut Membre Dernière intervention 18 novembre 2006 - 14 août 2006 à 02:27
DerWanderer Messages postés 9 Date d'inscription lundi 26 juin 2006 Statut Membre Dernière intervention 18 novembre 2006 - 14 août 2006 à 21:56
Bonjour,

J'ai écrit cette sub routine

Private Sub TValidate(ByRef T As TextBox, ByVal LgMAxVal As Long)
Dim Str_Chaine As String
Dim LgNombre As Long
Str_Chaine = ""
LgNombre = CLng(T.texte)
If LgNombre >= 0 And LgNombre <= LgMAxVal Then
   Cmd_Validate.Enabled = True
Else
   Str_Chaine = "Invalid Value, must be between 0 and " + CStr(LgMAxVal)
   Call MsgBox(Str_Chaine, vbExclamation, "Editing Database Value")
   Cmd_Validate.Enabled = False
   T.SetFocus
End If
End Sub

celà me semble basique

Mais quand je l'appelle par exemple avec un textbox qui s'appele Txt_Textbob

Call Tvalidate(Txt_Textbox, 9999)

j'ai une erreur de type et le debugger VB6 montre que je ne passe pas la texbox mais la valeur de la propriété text de cette textbox à ma procédure

une idée ?
Der Wanderer

8 réponses

chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
14 août 2006 à 02:45
Bonsoir,
Essaies
Private Sub TValidate(T As TextBox, LgMAxVal As Long)
sans ByRef ni ByVal

Ensuite je ne vois pas pourquoi tu passes TextBox en argument puisque tu testes sur TextBox.Text.Passes plutôt une chaine.
Si tout cela pour donner le focus à ton TextBox, transformes ta procédure en fonction
booléenne.et selon qu' elle est False ou True, tu redonnes le focus à ton TextBox
ou tu quittes .
t' es d' accord avec moi ?
 
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
14 août 2006 à 08:18
passer la variable lgMaxVal par valeur ou par référence ne changera rien (il est d'ailleurs recommandé de passer la variable par valeur et non référence, et l'inverse pour le TextBox, c'est bien plus sûr !).
Par contre, à quelle ligne apparait l'erreur ?

essaye avec :
Private Sub TValidate(ByRef T As Control, ByVal LgMAxVal As Long)

J'ai jamais eu ce genre de problème, et pourtant j'utilise ce genre de fonction depuis belle lurette !
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
14 août 2006 à 09:47
La déclaration est bonne
Erreur de syntaxe :
LgNombre = CLng(T.texte)   <--- Pas de E à la fin de Text

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Champion du monde de boule de cristal - 2005
Le savoir est la seule matière qui s'accro
0
DerWanderer Messages postés 9 Date d'inscription lundi 26 juin 2006 Statut Membre Dernière intervention 18 novembre 2006
14 août 2006 à 13:08
Déjà merci de vos réponses
Merci aussi pour pour Text au lieu de Texte, ces fautes d'inatentions sont une plaie

Bon pour vous donner plus d'infos et pour mieux comprendre ma problematique j'apporte les éléments suivants

J'ai 11 textbox qui doivent recevoir des valeurs Long, elles vont selon les cas de 0 à 9999, 99999, 999999
Par les 2 sub suivantes je valide déjà que que seuls des chiffres sont saisis

Private Sub Txt_AntiAirValue_KeyPress(ByRef KeyAscii As Integer)
Call TesteTouche(KeyAscii)
End Sub

Private Sub TesteTouche(ByRef KeyAscii As Integer)
Dim Str_Chaine As String
If KeyAscii < Asc("0") Or KeyAscii > Asc("9") Then
   Str_Chaine = "Numbers only please"
   Call MsgBox(Str_Chaine, vbExclamation, "Editing Database Value")
   KeyAscii = 0
End If
End Sub

Bien, mais pour valider les valeurs saisies je le fais à la fin via un bouton de validation qui lance pour chaque textbox la validation

Private Sub TValidate(ByRef T As TextBox, ByVal LgMAxVal As Long)
Dim Str_Chaine As String
Dim LgNombre As Long
Str_Chaine = ""
LgNombre = CLng(T.text)
If LgNombre >= 0 And LgNombre <= LgMAxVal Then
   Cmd_Validate.Enabled = True '
Else
   Str_Chaine = "Invalid Value, must be between 0 and " + CStr(LgMAxVal)
   Call MsgBox(Str_Chaine, vbExclamation, "Editing Database Value")
   Cmd_Validate.Enabled = False
   T.SetFocus
End If
End Sub

Et comme je l'ai écrit dans mon premier message quand je passe -> call TValidate(Txt_AntiAirValue,99999) et ben Txt_AntiAirValue est vu comme Txt_AntiAirValue.Text soit "12345" et non comme l'objet textbox lui même
et j'ai un message d'erreur "type imcompatible"

J'ai aussi essayé de mettre (T as Control) mais j'ai le même résultat, je pense qu'il y qqchose qui force le paramètre a être vu comme la propriété Text du textbox!! MAIS QUOI ? mystère et boule de gomme

Der Wanderer
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
14 août 2006 à 18:52
Bonjour,
Est-ce que au moment ou tu tapes CLng(T.   la liste des méthodes
d' un TextBox apparait ?
Si oui le T est reconnu comme objet Text, sinon il ne l' est pas.
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
14 août 2006 à 18:53
je veux dire objet TextBox
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
14 août 2006 à 19:48
Juste au cas où : ta sub, elle est bien dans la feuille d'où tu fait l'appel ? Pas dans un module ?
0
DerWanderer Messages postés 9 Date d'inscription lundi 26 juin 2006 Statut Membre Dernière intervention 18 novembre 2006
14 août 2006 à 21:56
Bon je suis plus que perplexe.

J'ai juste modifié texte en text, puis declaré comme proposé ci-dessus, T as Control, et PAF ( non, pas chocapic) c'est tombé en marche, plus fort, à tout zazard j'ai remis T as Textbox et la celà continue à fonctionner !!!!!, je précise aussi à tout hasard que j'ai rebooté ma machine entre temps !!!

L'informatique à ses raisons que la raison ne connait pas!!!

Pour répondre aux questions oui la sub est dans la feuille et oui "T." vois s'afficher les propriétés

voila voila voila !!!

Merci à tous de votre aide.

Der WanderVousAvezDitBizarre
0
Rejoignez-nous