Je veux faire en sorte que le texte saisi par un utilisateur dans une zone de texte devienne en majuscules. Je connais deux façons de faire cela, qui sont:
Textbox1.Text = UCase(Textbox1.Text) or Textbox1.Text = Textbox1.Text.ToUpper
TOUTEFOIS: les deux ont le même problème (lorsqu'ils sont intégrés dans un gestionnaire d'événements Textbox1_TextChanged
), c'est-à-dire que le le curseur continue d'être déplacé vers le début, donc si vous tapez lentement, disons abcdef, il sort comme FEDCBA. Existe-t-il un moyen de ramener le curseur à la fin de la chaîne après chaque fois qu'il fonctionne pour rendre le texte en majuscule?
4 Réponses :
Utilisez l'événement KeyPress pour détecter les lettres minuscules saisies et convertissez-les en majuscules au fur et à mesure:
TextBox1.CharacterCasing = CharacterCasing.Upper
Ucase ()
est utilisé uniquement après le personne a fini d'entrer le texte.
Si vous utilisez VB.NET, il vous suffit de définir la propriété .CharacterCasing
de la zone de texte sur .Upper code > - Aucun code nécessaire. Mais si vous vouliez utiliser du code pour une raison quelconque, utilisez ceci:
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) If KeyAscii > 96 And KeyAscii < 123 Then 'Typed letter from "a-z", map it to "A-Z" KeyAscii = KeyAscii - 32 End If End Sub
Merci! Un suivi - lorsque je crée un événement "Keypress" pour cette zone de texte, il génère automatiquement ceci:
Private Sub TextBox1_KeyPress (expéditeur en tant qu'objet, e en tant que KeyPressEventArgs) gère TextBox1.KeyPress - puis-je simplement le remplacer par le vôtre?
Si c'est ce que cela vous donne, alors vous n'utilisez pas VBA, vous utilisez Visual Studio et VB.NET - ce ne sont pas la même chose. J'ai mis à jour la réponse pour inclure comment le faire dans VB.NET
Merci pour le conseil sur CharacterCasing - cela fonctionne également! Cependant, tout ce qui est Keypress n'est pas une perte de temps, car je veux aussi l'utiliser pour analyser ce qui est tapé.
J'ai changé les balises de VBA en VB.Net, parce que vous avez raison. C'est évidemment une confusion de base, mais je suis un amateur total qui essaie de m'enseigner à partir de zéro - j'ai obtenu le logiciel gratuitement de mon université.
Votre version ne fonctionnait pas tout à fait pour moi dans Visual Basic 2019, mais elle en a constitué la base, ce qui fonctionne (où "txtPrem1" est la zone de texte):
Private Sub txtPrem1_KeyPress (sender As Object, e As KeyPressEventArgs) Gère txtPrem1.KeyPress Dim KeyAscii = AscW (e.KeyChar) Si KeyAscii> 96 et KeyAscii <123 Then 'Lettre tapée de "a-z", mappez-la sur "A-Z" KeyAscii = KeyAscii - 32 Fin si e.KeyChar = ChrW (KeyAscii) End Sub
Argh - comment le formater pour qu'il ait l'air correct? (Désolé - débutant total)
Il n'est pas nécessaire de faire tout cela dans VB.NET - Regardez ma réponse mise à jour.
Que diriez-vous de ceci:
Private Sub MyText_TextChanged(sender As Object, e As EventArgs) _ Handles MyText.TextChanged Dim oText As TextBox = CType(sender, TextBox) oText.Text = oText.Text.ToUpper oText.SelectionStart = oText.Text.Length oText.SelectionLength = 0 End Sub