Il controllo ActiveX ComboBox distribuito
con il Visual
Basic 6 è sempre stato uno dei miei favoriti e com tale, uno dei più
utilizzati nei miei progetti di sviluppo. È forse per questo che in questo
controllo, più che in altri, ho sempre sentito la necessità di andare oltre e
di evidenziare alcune funzionalità che, stranamente, i suoi progettisti avevano
tralasciato di esportare esplicitamente verso l'esterno.
Anche se il controllo da me proposto non ha, per
filosofia di progettazione, un'associazione esplicita ai dati ADO come invece lo
ha il ComboBox standard, ha alcune funzionalità che lo rendono a mio avviso
molto interessante, soprattutto per quanto riguarda poi l'utilizzo da parte
dell'utente finale (se desideri un ComboBox incrementale che sia anche
associato ai dati dai un'occhiata al nostro controllo ActiveX
DBCodDescr).
La funzionalità più importante è quella di
essere un controllo a ricerca incrementale. Se non è immediatamente chiaro cosa
significhi ricerca incrementale vediamo di capirci con un esempio.
Consideriamo la seguente lista di valori aggiunti
al controllo tramite il comando AddItem
(1,12,13,21,22,111) e consideriamo la pressione consecutiva del tasto
"1" per tre volte di fila quando il fuoco è attivo su un ComboBox. Se
il ComboBox é quello standard la sequenza dei tre tasti provocherà la comparsa
nell'ordine del numero 1, quindi del numero 12 e infine del numero 13 con grave
imbarazzo dell'utente che invece si aspettava, a rigor di logica, tutto un altro
comportamento. Per chi ha usato il ComboBox standard il comportamento è chiaro,
premere tre volte 1 significa ottenere il terzo elemento della ComboBox che
inizia per 1. Non si può, però, affermare che questo comportamento sia
banalmente evidente e utizzabile anche da un utente inesperto. Se però il Combo
è il nostro allora si ha che la seguenza dei tre tasti genera la
comparsa nell'ordine dei seguenti valori: prima il valore 1, poi il valore 111 e infine
ancora il valore 111 con gioia e gaudio dell'utente che già al secondo
tentativo si trovato proposto il valore desiderato.
Anche se banale, spero che quest'esempio abbia
chiarito il diverso comportamento dei due controlli è la maggiore coerenza del
nostro controllo durante l'utilizzo da parte di un utente inesperto
Durante la ricerca di elementi all'interno del
combo è possibile azzerare la ricerca tramite il tasto CANC.
La ricerca si annulla automaticamente se non si digita caratteri per un tempo
superiore a 5 secondi.
Il controllo presenta inoltre due proprietà
aggiuntive rispetto a quelle esposte dal controllo standard. La proprietà PermitFreeText
e la proprietà MaxLength. Difatti, di default,
non è possibile aggiungere da tastiera altri elementi alla lista se non quelli
aggiunti via codice tramite il comando AddItem.
Tramite tastiera è solo possibile ricercare gli elementi come visto sopra. Se
si imposta però la proprietà booleana PermitFreeText
a TRUE allora è possibile inserire nuovi
elementi nella lista. L'elemento viene aggiunto alla lista se il fuoco abbandona
il controllo o se si preme il pulsante RETURN.
La seconda proprietà è collegata a tale modalità. Se diversa da zero imposta
infatti il numero massimo di caratteri che un nuovo elemento della lista può
contenere. Tale valore non influenza gli elementi aggiunti tramite il comando
AddItem ma solo quelli aggiunti tramite tastiera.
Tutto il sito è fatto in Mason. Senza questo linguaggio derivato dal Perl,
molte degli strumenti utilizzati per la gestione del sito non sarebbero mai
potuti essere sviluppati.