Remplacer & par 1 lors de la saisie dans textbox
Résolu/Fermé
Louloude74
Messages postés
62
Date d'inscription
mercredi 1 août 2018
Statut
Membre
Dernière intervention
17 avril 2024
-
6 déc. 2020 à 13:29
yg_be Messages postés 23327 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 15 novembre 2024 - 6 déc. 2020 à 18:48
yg_be Messages postés 23327 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 15 novembre 2024 - 6 déc. 2020 à 18:48
A voir également:
- &É ' è_çà jeux
- Remplacer disque dur par ssd - Guide
- Remplacer dans word - Guide
- Saisie gestuelle iphone - Guide
- Quel site pour remplacer coco - Accueil - Réseaux sociaux
- Saisie vocale sms - Guide
4 réponses
yg_be
Messages postés
23327
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
15 novembre 2024
Ambassadeur
1 551
6 déc. 2020 à 14:14
6 déc. 2020 à 14:14
bonjour,
peut-être:
peut-être:
Private Sub TextBox1_Change() Me.TextBox1.Text = UCase(Me.TextBox1.Text) Me.TextBox1.Text = replace(Me.TextBox1.Text,"&","1") ' ... Me.TextBox1.Text = replace(Me.TextBox1.Text,"à","0") End Sub
Utilisateur anonyme
6 déc. 2020 à 14:51
6 déc. 2020 à 14:51
Bonjour
si tu travailles en VB.Net, il y a plus optimisé (en temps d'exécution)
Il faut dériver le textbox et réécrire la méthode ProcessCmdKey
Voilà un exemple en C# (le langage de base de .Net, VB.Net c'est "juste" un skin VB)
https://codes-sources.commentcamarche.net/forum/affich-1526742-keydown-keypress#5
Et de quoi passer de C# à VB.Net
https://lite.qwant.com/?q=c%23+to+vb&client=opensearch
si tu travailles en VB.Net, il y a plus optimisé (en temps d'exécution)
Il faut dériver le textbox et réécrire la méthode ProcessCmdKey
Voilà un exemple en C# (le langage de base de .Net, VB.Net c'est "juste" un skin VB)
https://codes-sources.commentcamarche.net/forum/affich-1526742-keydown-keypress#5
Et de quoi passer de C# à VB.Net
https://lite.qwant.com/?q=c%23+to+vb&client=opensearch
Utilisateur anonyme
6 déc. 2020 à 15:19
6 déc. 2020 à 15:19
Je n'ai pas expliqué pourquoi ça n'est pas optimisé de faire des Replaces dans l'évènement Change (et c'est valable quelque soit le VB utilisé, mais y'a qu'en .Net où j'ai une bonne solution)
Admettons que ton textBox contienne AZERTYUIOP et que tu viennes de taper à.
On va appliquer les 10 Replace les un après les autres.
Chaque Replace va scruter chaque caractère pour voir s'il s'agit de celui qu'il doit remplacer:
Donc l'évènement Changed est à nouveau déclenché et on recommence à scruter AZERTYUIOP0 10 fois pour rien.
Au final 220 Replaces sont exécutés et un seul porte ses fruits.
Evidement c'est fait en un battement de cils, mais comme je suis un peu tordu, je vais copier coller
Il y a changement, donc
A vue de nez 10 évènements Changed qui vont faire chacun 10 Replaces, en espérant que toutes les exécutions en parallèle ne vont pas entrer en conflit.
Là ça va commencer à se voir, et je ne te dis pas si tu tapes une touche entre temps....
Admettons que ton textBox contienne AZERTYUIOP et que tu viennes de taper à.
On va appliquer les 10 Replace les un après les autres.
Chaque Replace va scruter chaque caractère pour voir s'il s'agit de celui qu'il doit remplacer:
- AZERTYUIOPà pour trouver &,
- AZERTYUIOPà pour trouver é
- etc...sans rien faire jusqu'à
- AZERTYUIOPà pour trouver à, et là il trouve à qu'il remplace par 0 le textBox devient AZERTYUIOP0
Donc l'évènement Changed est à nouveau déclenché et on recommence à scruter AZERTYUIOP0 10 fois pour rien.
Au final 220 Replaces sont exécutés et un seul porte ses fruits.
Evidement c'est fait en un battement de cils, mais comme je suis un peu tordu, je vais copier coller
&é"'(-è_çàdans mon textBox
Il y a changement, donc
&é"'(-è_çàdevenir
1é"'(-è_çàqui va lancer un nouveau évènement change, l'un deux "Change" en cours d'exécution (je ne sais pas lequel sera prioritaire sur l'autre...) va rechanger le texte en
12"'(-è_çàqui déclenchera une 3eme exécution de l'évènement etc...etc...
A vue de nez 10 évènements Changed qui vont faire chacun 10 Replaces, en espérant que toutes les exécutions en parallèle ne vont pas entrer en conflit.
Là ça va commencer à se voir, et je ne te dis pas si tu tapes une touche entre temps....
Louloude74
Messages postés
62
Date d'inscription
mercredi 1 août 2018
Statut
Membre
Dernière intervention
17 avril 2024
1
6 déc. 2020 à 17:48
6 déc. 2020 à 17:48
Bonjour et merci pour vos réponses,
J'ai testé la première solution, celle avec replace().
C'est rapide mais ne fonctionne pas pour les touches é, è, ç et à.
Je suis allé voir ton lien et fait une conversion mais des lignes de code sont en rouge.
Dommage qu'il n'existe pas une fonction comme ucase().
Je vais continuer à chercher.
Encore merci pour vos réponses et bon dimanche.
Ludwig
J'ai testé la première solution, celle avec replace().
C'est rapide mais ne fonctionne pas pour les touches é, è, ç et à.
Je suis allé voir ton lien et fait une conversion mais des lignes de code sont en rouge.
Dommage qu'il n'existe pas une fonction comme ucase().
Je vais continuer à chercher.
Encore merci pour vos réponses et bon dimanche.
Ludwig
yg_be
Messages postés
23327
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
15 novembre 2024
1 551
6 déc. 2020 à 18:37
6 déc. 2020 à 18:37
as-tu ajouté les 8 lignes manquantes pour les remplacement de 2 à 8?
yg_be
Messages postés
23327
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
15 novembre 2024
1 551
>
yg_be
Messages postés
23327
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
15 novembre 2024
6 déc. 2020 à 18:48
6 déc. 2020 à 18:48
ceci sera un peu plus rapide. cela me semble assez peu important, l'ordi travaille juste un tout petit peu à chaque caractère entré:
Private Sub TextBox1_Change() dim t as string static aa as boolean if not aa then aa = true t=Me.TextBox1.Text t = UCase(t) t = replace(t,"&","1") ' ... ajouter les 8 lignes de 2 à 8 t = replace(t,"à","0") it t <> Me.TextBox1.Text then Me.TextBox1.Text = t end if aa = false end if End Sub