Visual Basic Simple
Creare una casella di testo con selezione automatica
Sincronizza Indice
Sincronizza Indice
Scarica il progetto
Scarica il progetto
Scarica il testo dell'articolo
Testo dell'articolo
Stampa l'articolo
Stampa l'articolo
Ricerca personalizzata

Difficoltà: 3 / 5


Una semplice TextBox con selezione automatica

Difficoltà: 2 / 5

Sicuramente avrete visto in vari programmi che, non appena una casella diventa l'oggetto attivo, il testo all'interno d'essa viene automaticamente selezionato, in modo che alla digitazione di un numero o una lettera il contenuto precedente scompaia.

Trasformare una casella di testo semplice in una autoselezionante è molto semplice. La soluzione sta nell'intercettare il momento in cui la casella di testo diventa l'oggetto attivo. Per questo scopo possiamo usare l'evento GotFocus.

Nel momento in cui la casella di testo esegue quell'evento dobbiamo dirgli di selezionare tutto il testo all'interno d'essa. Per fare questo useremo due proprietà dell'oggetto TextBox: SelStart e SelLength. La prima indica la posizione, all'interno della stringa, del carattere che sta all'inizio della selezione. La seconda proprietà indica il numero di caratteri selezionati partendo da SelStart verso destra.

Per cui per selezionare tutto il testo della casella, portare la selezione iniziale (SelStart) a 0 e la lunghezza della selezione (SelLength) uguale alla lunghezza della proprietà Text.

Inseriamo una casella di testo di nome Text1 sopra un form, apriamo la finestra del codice alla routine legata all'evento GotFocus dell'oggetto Text1 e scriviamo queste due semplici righe:

  1. Text1.SelStart = 0
  2. Text1.SelLength = Len(Text1.Text)

Più TextBox autoselezionanti in una matrice di controlli

Difficoltà: 3 / 5

Se volessimo riprodurre il medesimo effetto di autoselezione in una matrice di TextBox dovremmo fare qualche accorgimento. È necessario infatti calcolare a quale casella di testo vogliamo selezionare il testo. La nuova routine è:

  1. Private Sub Text2_GotFocus(Index As Integer)
  2.     Text2(Index).SelStart = 0
  3.     Text2(Index).SelLength = Len(Text2(Index).Text)
  4. End Sub

Il parametro Index in più è l'indice della casella attiva all'interno della matrice.


Implementazione della classe AutoSelTextBox

Difficoltà: 4 / 5

Proviamo a creare una classe per caselle di testo autoselezionanti da utilizzare attraverso il Multicasting. La chiameremo AutoSelTextBox.

Presentiamo subito il codice:

  1. Public WithEvents CasellaTesto As TextBox
  2. Private Sub CasellaTesto_GotFocus()
  3.     CasellaTesto.SelStart = 0
  4.     CasellaTesto.SelLength = Len(CasellaTesto.Text)
  5. End Sub
  6. Private Sub Class_Terminate()
  7.     Set CasellaTesto = Nothing
  8. End Sub

La prima riga dichiara una variabile pubblica di nome CasellaTesto di tipo TextBox. Essa sarà un puntatore alla casella di cui vogliamo selezionare il testo automaticamente. Abbiamo incluso l'istruzione WithEvents che fornisce la possibilità di gestire gli eventi di una variabile.

Applichiamo il codice visto nel primo esempio, senza matrici, nella routine legata all'evento GotFocus della variabile CasellaTesto.

Alla deallocazione della classe scatta l'evento Terminate della classe. Prima di perdere il controllo della classe dobbiamo ricordarci di deallocare anche la variabile CasellaTesto in modo da liberare la memoria. Questo è quello che fa l'istruzione alla riga 9.

Il form utilizzatore della classe possiederà due caselle di testo di nome Text3_1 e Tex3_2 ed entrambe verranno gestite da due istanze di classe AutoSelTextBox. L'assegnazione (mapping) delle caselle di testo alla proprietà CasellaTesto viene effettuata con questo codice:

  1. Private CasellaNumBox1 As New AutoSelTextBox
  2. Private CasellaNumBox2 As New AutoSelTextBox
  3. Private Sub Form_Load()
  4.     Set CasellaNumBox1.CasellaTesto = Me.Text3_1
  5.     Set CasellaNumBox2.CasellaTesto = Me.Text3_2
  6. End Sub

Le prime due righe definiscono due istanze di AutoSelTextBox.
Le righe 5 e 6 effettuano il mapping delle caselle di testo con le variabili istanziate.

È fondamentale ricordarsi che prima della chiusura del programma dobbiamo deallocare le due istanze di classe, altrimenti rimarrebbe un'area della memoria bloccata da risorse inaccessibili. La deallocazione si effettua nel solito modo: Set Variabile = Nothing.

Scriviamo per cui anche queste istruzioni di deallocazione, posizionate nell'evento Terminate del Form, ultimo punto dove è possibile eseguire operazioni, prima che venga scaricato il form dalla memoria.

  1. Private Sub Form_Terminate()
  2.     Set CasellaNumBox1 = Nothing
  3.     Set CasellaNumBox2 = Nothing
  4. End Sub

Come per tutte le classi, quest'operazione è fondamentale perché non viene eseguita automaticamente dal sistema operativo. La mancata attuazione di quest'operazione provoca la diminuzione di risorse disponibili nel computer, rallentamenti ed anche malfunzionamenti.


Una soluzione un po' rustica

Difficoltà: 2 / 5

Un'ultima soluzione si può effettuare tramite l'utilizzo dell'istruzione SendKeys.
Infatti potremmo portare il cursore all'inizio della casella di testo e fargli effettuare la selezione attraverso l'utilizzo dei tasti.

Questa soluzione è molto grezza e può provocare errori nel programma. In particolare non funziona quando la casella diventa attiva tramite un click con il mouse.

Comunque l'istruzione per l'autoselezione da scrivere dentro la routine dell'evento GotFocus di una casella di testo è:

  1. SendKeys "^{HOME}+^{END}"

Viene inviato alla casella di testo inizialmente un CTRL HOME che porta il cursore all'inizio ed in seguito viene inviato SHIFT CTRL END che porta il cursore alla fine del testo della casella tenendo premuto il tasto SHIFT utilizzato per fare la selezione.

Si sconsiglia fortemente l'uso della terza soluzione perché può provocare errori ed il suo comportamento può essere modificato da qualche altra routine.

Fibia FBI
18 Novembre 2000

Scarica il progetto
Scarica il progetto
Scarica il testo dell'articolo
Scarica il testo dell'articolo
Stampa l'articolo
Stampa l'articolo
Torna all'indice degli HowTo