Conversione da minuscolo a maiuscolo

di il
15 risposte

Conversione da minuscolo a maiuscolo

Buongiorno a tutti,
ho un piccolo problema che non sono riuscito a risolvere.
Ho necessità di scrivere solo lettere maiuscole in una texbox.
Nel mio codice ho inserito le funzioni che trasformano le lettere da minuscole a maiuscole ma con un problema:
Se ad es. ho scritto la parola DASCO e voglio correggere le prime due lettere per scrivere la parola VASCO, come vado a modificare la prima lettera il cursore mi salta in ultima posizione e se sono molte lettere è fastidioso. Ovvero, a ogni lettera che modifico il cursore mi salta in ultima posizione e quindi devo riposizionarlo.
Allego il codice, grazie:
Private Sub txt_voce_Change()
txt_voce.Text = UCase(txt_voce.Text)
txt_voce.SelStart = Len(txt_voce.Text)
counter = 0
End Sub

15 Risposte

  • Re: Conversione da minuscolo a maiuscolo

    Non utilizzare il Change ma il Keypress (e non su tutto il contenuto ma solamente sul carattere del tasto premuto)
  • Re: Conversione da minuscolo a maiuscolo

    Hai ragione oregon, ma con Keypress al posto di Change ho il problema dell'incollaggio. Mi spiego meglio: se scrivo o correggo va bene ma se incollo una frase in minuscolo non viene trasformata in maiuscola... Non so proprio come risolvere...
  • Re: Conversione da minuscolo a maiuscolo

    Forse potresti mettere upper tutta la casella quando la textbox prende o lascia il focus ,"tipo" questo https://docs.microsoft.com/it-it/dotnet/api/system.windows.forms.control.gotfocus?view=netcore-3.1
  • Re: Conversione da minuscolo a maiuscolo

    Utilizza il LostFocus e converti tutto all'uscita
  • Re: Conversione da minuscolo a maiuscolo

    Oregon se mi dai un aiuto perché non ho capito bene come fare
  • Re: Conversione da minuscolo a maiuscolo

    Utilizza l'evento LostFocus al posto del Change
  • Re: Conversione da minuscolo a maiuscolo

    Con lostfocus, le maiuscole appaiono quando si seleziona un altro componente:
    Private Sub txt_voce_LostFocus()
        txt_voce.Text = UCase(txt_voce.Text)
    End Sub
    con un CommandButton le maiuscole appaiono quando clicchi il bottone:
    Private Sub Command1_Click()
        txt_voce.Text = UCase(txt_voce.Text)
    End Sub
    in alternativa puoi intercettare il tasto invio:
    Private Sub txt_voce_KeyDown(KeyCode As Integer, Shift As Integer)
        If KeyCode = vbKeyReturn Then txt_voce.Text = UCase(txt_voce.Text)
    End Sub
    scegli la più adatta al tuo scopo
  • Re: Conversione da minuscolo a maiuscolo

    Buongiorno a tutti.
    Grazie Rubik per le delucidazioni, ma non risolvo il mio problema!
  • Re: Conversione da minuscolo a maiuscolo

    Lo risolvi usando l'evento LostFocus !
  • Re: Conversione da minuscolo a maiuscolo

    Ho provato ad usare LostFocus, ma mi scrive in minuscolo:
    Private Sub txt_voce_LostFocus()
    txt_voce.Text = UCase(txt_voce.Text)
    txt_voce.SelStart = Len(txt_voce.Text)
    counter = 0
    End Sub
  • Re: Conversione da minuscolo a maiuscolo

    Prova a mettere dei breakpoint dentro gli eventi e vedi quando effettivamente ci entri
  • Re: Conversione da minuscolo a maiuscolo

    Scrive in minuscolo finché sei sul controllo, appena ti sposti tutto va in maiuscolo. Basta

    txt_voce.Text = UCase(txt_voce.Text)
  • Re: Conversione da minuscolo a maiuscolo

    Le soluzioni che ti ho proposto convertono in maiuscolo non mentre digiti ma solo alla fine:
    1) lostfocus, quando abbandoni il controllo
    2) command, quado clicchi il tasto aggiunto (accetta)
    3) quando premi return (invio, enter), sulla casella txt_voce

    Se proprio vuoi che mentre digiti, nella casella vengano mostrati sempre e solo le maiuscole, ecco un codice scritto al volo, non sono certo di aver previsto tutte le evenienze, è da molto che non scrivo in VB6:
    Dim pos As Integer
    Dim secondavolta As Boolean
    
    ' la routine txt_voce_Change viene eseguita due volte
    ' la prima quando si cambia il testo con la digitazione
    ' la seconda quando agisce UCase
    ' la posizione del cursore va intercettata solo la prima volta
    ' e ripristinata solo alla fine
    
    Private Sub txt_voce_Change()
        If secondavolta Then
            secondavolta = False
        Else
            pos = txt_voce.SelStart
            secondavolta = True
            txt_voce.Text = UCase(txt_voce.Text) ' se il testo cambia la routine viene rieseguita
            txt_voce.SelStart = pos
        End If
    End Sub
    
    ' se vengono digitati numeri o caratteri speciali, la routine non viene rieseguita 
    ' perché il testo non cambia e la boolean secondavolta non viene settata a false.
    ' con un controllo sui caratteri digitati, si risolve il problema.
    
    Private Sub txt_voce_KeyUp(KeyCode As Integer, Shift As Integer)
        If KeyCode < 58 Or KeyCode > 122 Then secondavolta = False
    End Sub
    Funziona anche se incolli un testo in minuscolo, ci sarebbero anche altre strade, ma questa è la prima idea che mi è venuta.
  • Re: Conversione da minuscolo a maiuscolo

    Ciao
    prova questo codice:

    Private Sub Text1_KeyPress(KeyAscii As Integer)
    KeyAscii = Asc(UCase(Chr(KeyAscii)))
    End Su
Devi accedere o registrarti per scrivere nel forum
15 risposte