En el evento Validate (Validating), puedes hacer las gestiones que tratan de asegurar que el contenido de un control de entrada del usuario es como se espera que sea, o bien es el momento de modificarlo como toque...
El código es tan sencillo como esto:
Private Sub TextBox1_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles TextBox1.Validating
TextBox1.Text = TextBox1.Text.ToUpper ' lo convierte a mayúsculas.
End Sub
El evento Validating, ocurre cuando un control pierde el foco en favor de otro. Si por ejemplo tras meter un texto se debe pulsar un botón, justo cuando pulsa el botón y antes de cambiar el foco al botón, se produce dicho evento... ...esto es más eficaz que hacerlo continuamente cada vez que el texto cambia (como sucedería en el evento "Changed").
En el ejemplo (usando el evento validating), si acontece algo que no debe permitirse, puede devolverse 'cancelar', en el argumento e, tras informar al usuario del asunto...
También es útil si resultare que no hay ningún botón y deba ser cambiado por el usuario (si la operación fuera algo más compleja), aquí un código de ejemplo:
Private Sub TextBox1_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles TextBox1.Validating
Dim k As UInt32
Dim chr() As Char = TextBox1.Text.ToCharArray
Dim charsInvalidos As String = "abcdefghijklmnñopqrstuvwxyzáéíóúü"
For k = 0 To chr.GetLength(0) - 1
If (charsInvalidos.Contains(chr(k)) = True) Then
MsgBox("Cambie la letra '" & chr(k) & "' a mayúsculas, no se permiten minúsculas " & vbNewLine & "( Y de paso cambie el resto de letras minúsculas que existan).")
e.Cancel = True
Exit For '
End If
Next
'TextBox1.Text = TextBox1.Text.ToUpper
End Sub