molbento
Messages postés35Date d'inscriptionvendredi 6 avril 2007StatutMembreDernière intervention23 mai 2007
-
18 avril 2007 à 10:35
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 2014
-
18 avril 2007 à 12:17
Bonjour je développe en visual basic.J'ai un petit problème avec les expression régulière. J'aimerais n'autoriser que la saisie de valeur numérique dans un text box et donc interdir tout les caractères qui ne sont pas numérique. Quand je tappe un caractère (ex P) mon code ne fonctionne pas, car la lettre P ne s'efface pas. Qyelqu'un pourait-il m'aider. Dans quel fonction de text1 je doit mettre le code que je mets dans Private Sub Text1_KeyPress(KeyAscii As Integer). On quelqu'un pourrait me donner un exemple d'utilisation des expressions régulières pour n'autoriser que la saisie de caracère numérique merci d'avance. Voila le code que j'ai saisie.
Dim expnum As String
Function numerique(myPattern As String, myString As Integer)
Dim objRegExp As RegExp
Dim objMatch As Match
Dim colMatches As MatchCollection
Dim RetStr As String
'Création d'une nouvelle instance de l'objet RegExp (inutile si vous avez écrit "New" dans la déclaration)
Set objRegExp = New RegExp
'Tient-on compte de la différence entre majuscules et minuscules (case sensitiveness) ou non (case insensitiveness) ?
objRegExp.IgnoreCase = True
'Une recherche globale s'effectue sur la totalité du texte, sans s'arrêter dès le premier résultat trouvé
objRegExp.Global = True
'test de l'expression regulière
If (objRegExp.Test(Chr(myString)) = True) Then
TestRegExp = True
Else
TestRegExp = False
End If
End Function
Private Sub Text1_KeyPress(KeyAscii As Integer)
expnum = "[0-9]"
If (numerique(expnum, KeyAscii) = False) Then
' on efface le caractère et on remet le focus du textbox au bon endroit
taille = Len(Text1.Text)
Text1.Text = Left(Text1.Text, taille) 'efface le dernier caractère tappé
Text1.SelStart = Len(Text1) ' Replace le curseur à la fin
End If
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 18 avril 2007 à 10:42
Pourquoi utiliser les expression régulière pour un si petit traitement ?
De plus, au KeyPress, ton textbox ne contient pas encore ton nouveau caratère (il est stocké dans le KeyAscii), donc pour annuler l'ajout du caractère, il suffit de passer le KeyAscii à 0 :
Private Sub Text1_KeyPress(KeyAscii As Integer)
If (IsNumeric(KeyAscii)) Then KeyAscii = 0
End If End Sub
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 18 avril 2007 à 10:51
Salut,
Sinon en regardant dans les snippets de www.codyx.org, ou en recherchant dans le forum (sujet traité pas plus tard qu'hier) tu aurais trouver une autre solution que les expressions réguliaires
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 18 avril 2007 à 12:17
Bon,
Une fois de plus un sujet traitant de la saisie contrôlée d'une textbox (numérique).... C'est lassant.
Il est également lassant de dire, comme je le fais ici une dernière fois, que ce contrôle de saisie ne sert à rien si, parrallèlement, on n'hinibe pas les copier coller (hé houi !)
J'ai ma méthode pour, à la fois :
- contrôler la saisie tout au long de la saisie
- contrôler les copier-coller indus mais laisser passer les bons
- permettre à l'utilisateur de saisir avec, comme séparateur de décimales, celui qu'il entend
- ne permettre comme séparateur de milliers que l'espace ou rien du tout
Pour y parvenir, j'utilise l'événement Change (Hé! Hé ! oui, Chaibat.... ne bondis pas !), mais avec une astuce.
Maintenant :
- Déposer une source pour celà me parait démesuré
- Déposer un simple "snippet" serait insuffisant car il me faut accompagner le tout d'explications et l'assortir de certains commentaires relatifs à l'utilisation ensuite de ce qui a été saisi, dans l'optique d'une distribution toujours efficace de son appli, quels que soient les paramètres locaux.