Visual Basic Simple
Limitare il numero di caratteri in una ComboBox
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à: 2 / 5


Limitare una ComboBox senza l'utilizzo dell'API

Difficoltà: 1 / 5

Stranamente i controlli ComboBox non possiedono una proprietà MaxLength che consenta di limitare il numero di carattere ammessi nella casella, analogamente alle TextBox. Talvolta però si rende necessario impedire all'utente l'immissione di un numero di caratteri superiore.

Limitare il numero di caratteri immessi in una ComboBox è un'operazione molto semplice e questa prima parte dell'articolo utilizzerà un banalissimo controllo dei tasti digitati, in modo da rifiutare i caratteri in eccesso prima che vengano inviati al controllo e visualizzati.

Il codice è orientato intorno all'eventoKeyPress della singola ComboBox:

  1. Option Explicit
  2. Private Const lngMaxCaratteri As Long = 10
  3. Private Sub cboMetodo1_KeyPress(KeyAscii As Integer)
  4.     If Len(cboMetodo1.Text) >= intMaxCaratteri And (KeyAscii <> vbKeyBack) Then
  5.         KeyAscii = 0
  6.     End If
  7. End Sub

La costante lngMaxCaratteri stabilisce il numero di caratteri ammessi all'interno della ComboBox cboMetodo1. Alla riga 6 è svolto il controllo sulla lunghezza attuale del testo inserito nella casella e sull'eventuale tasto BackSpace, in modo da non ammettere ulteriori caratteri ad eccezione del tasto di cancellazione. Al verificarsi di queste due condizioni, il carattere digitato sarà semplicemente ignorato.

Il controllo sembra funzionare correttamente ma presenta un grossissimo limite: è impedita sì la digitazione di un testo più ampio di quello consentito (10 caratteri) ma non è impedita l'operazione Incolla, effettuabile mediante tastiera oppure mediante Menu popup.


Limitare una ComboBox con l'utilizzo dell'API

Difficoltà: 2 / 5

Tale limite può essere superato facendo uso dell'API, inviando il messaggio CB_LIMITTEXT alla ComboBox. Il messaggio può essere inviato mediante la funzione SendMessage, trattata in molti altri articoli in questa sezione.

  1. Option Explicit
  2. Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
  3. Private Const CB_LIMITTEXT = &H141
  4. Private Const lngMaxCaratteri As Long = 10
  5. Private Sub Form_Load()
  6.     Call SendMessage(cboMetodo2.hwnd, CB_LIMITTEXT, lngMaxCaratteri, ByVal 0&)
  7. End Sub

La funzione API SendMessage è dichiarata alla riga 3, mentre alla riga 5 è dichiarata la costante API CB_LIMITTEXT, utilizzata per specificare il messaggio da inviare alla ComboBox. La costante lngMaxCaratteri specificherà il numero massimo di caratteri ammessi.
Così al caricamento del Form sarà inviato il messaggio alla finestra ComboBox.

Questa soluzione consente non solo di impedire la digitazione di un numero di caratteri superiore a quelle previsto ma anche di impedire l'operazione Incolla dagli Appunti di Windows. Un altro vantaggio è quello di poter sfruttare la caratteristica di autoselezione della casella: nel momento in cui la ComboBox diventa il controllo attivo il testo è automaticamente selezionato e la pressione di un tasto qualsiasi ad eccezione delle freccette provoca la sostituzione del testo precedente con quello appena digitato.

Inoltre la limitazione può essere disabilitata inviando semplicemente il messaggio CB_LIMITTEXT ed il valore 0, anziché il numero massimo di caratteri ammessi. Questo determina una più facile gestione della casella combinata.

Nella stragrande maggioranza dei casi si raccomanda l'uso della seconda soluzione e nel progetto sviluppato sono utilizzate entrambe le soluzioni per permettere un diretto confronto.

La possibilità di disabilitare con facilità la limitazione è una ragione in più per preferire la seconda soluzione a quella interamente basata su Visual Basic.

Fibia FBI e Tielle
16 Dicembre 2002

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