UCase$/LCase$ in Text Box Change Event Inverts Text Property (84059)



The information in this article applies to:

  • Microsoft Visual Basic Standard Edition for Windows 2.0
  • Microsoft Visual Basic Standard Edition for Windows 3.0
  • Microsoft Visual Basic Professional Edition for Windows 2.0
  • Microsoft Visual Basic Professional Edition for Windows 3.0
  • Microsoft Visual Basic Standard Edition for Windows 1.0

This article was previously published under Q84059

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.

Modification Type:MajorLast Reviewed:12/12/2003
Keywords:KB84059