UCase$/LCase$ in Text Box Change Event Inverts Text Property

Last reviewed: June 21, 1995
Article ID: Q84059
The information in this article applies to:

- Standard and Professional Editions of Microsoft Visual Basic for

  Windows, versions 2.0 and 3.0
- Microsoft Visual Basic programming system for Windows, version 1.0

SUMMARY

When using the UCase$ or LCase$ functions in Microsoft Visual Basic for Windows to capitalize text or make text lower case from within the change procedure of a text box, you may encounter unexpected results if the following conditions are true:

  • The text property of the text box is being updated by the UCase$ or LCase$ statement.
  • The resulting string created by UCase$ or LCase$ is assigned to the text property of the text box.
  • The above statements appear in the Change event procedure of the text box.

Every time a key is pressed, the text contents are changed, and the cursor is placed at the beginning of the line. This causes the character for your next key press to be inserted at the beginning of the line rather than the end.

MORE INFORMATION

When allowing users to enter text into text boxes, it is often desirable to control whether the user enters all uppercase or all lowercase letters. To do this, it would seem that putting a UCase$ or LCase$ statement in a text box Change event would allow you to enter only uppercase or lowercase letters into the text box. However, each time you press a key, the Change event fires and the cursor is brought back to the beginning of the text box as a result of assigning the Text property a new string.

Steps to Reproduce Behavior

  1. Start Visual Basic for Windows or from the File menu, select New Project (press ALT, F, N) if Visual Basic for Windows is already running. Form1 is created by default.

  2. Put a text box (Text1) on Form1 by either double-clicking the text box control or single clicking the text box control and drawing it on Form1.

  3. Add the following code to the Text1_Change event procedure:

          Sub Text1_Change ()
            text1.text = UCase$(text1.text)
          End Sub
    
    

  4. Press the F5 key to run the program.

Notice that when you try to type information into the text box that it is entered in reverse order of what you would expect.

An alternative method of changing all contents of the text box to capital letters is to change the KeyAscii code of the typed information in the text box KeyPress event as follows:

Sub Text1_KeyPress (KeyAscii As Integer)

' Check to see if key pressed is a lower case letter.
  If KeyAscii >= 97 And KeyAscii <= 122 Then

    'If it is lowercase, change it to uppercase.
    KeyAscii = KeyAscii - 32

  End If

End Sub

When you run the above code, the letters typed into the text box are immediately changed to capital letters and are entered correctly as you type them in.

Another alternative method of changing the contents of the text box to uppercase letters is to add the following code to the Change event for the text box:

Sub Text1_Change ()

' Get the current position of the cursor.
  CurrStart = Text1.SelStart

' Change the text to capitals.
  Text1.Text = UCase$(Text1.Text)

' Reset the cursor position.
  Text1.SelStart = CurrStart

End Sub

SelStart sets or returns the starting point of text selected, and indicates the position of the insertion point if no text is selected.


Additional reference words: 1.00 2.00 3.00
KBCategory: kbprg kbcode
KBSubcategory: APrgOther


THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES SO THE FOREGOING LIMITATION MAY NOT APPLY.

Last reviewed: June 21, 1995
© 1998 Microsoft Corporation. All rights reserved. Terms of Use.