0
votes

Comment forcer la saisie de texte dans une zone de texte en majuscules?

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?


0 commentaires

4 Réponses :


1
votes

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


5 commentaires

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é.



0
votes

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


2 commentaires

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.



2
votes

Aller à la propriété Textbox, modifiez Caracticasing à supérieure

 Entrez la description de l'image ici


0 commentaires

0
votes

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


0 commentaires