Casella di Controllo o CheckBox  (ActiveX). - dal 04/09/04 pagina vista: volte

Uno degli "Oggetti ActiveX" utilizzabili nei nostri lavori è la Casella di controllo (in inglese CheckBox che tradotto liberamente significa : casella di spunta, di visto). La CheckBox :

Non selezionata

Selezionata

La guida in linea riporta una descrizione dell'oggetto forse non troppo chiara : " ..il controllo CheckBox consente all'utente di eseguire una scelta tra due valori opposti... " In effetti è esattamente la funzione che svolge la CheckBox, ma letta così fa pensare più ad una scelta tra due opzioni, tipica azione svolta dalle OptionButton (Pulsante di Opzione), che consentono di selezionare una delle opzioni presenti, e di consentire l'esecuzione di istruzioni legate solo all'Opzione selezionata: quindi o l'una o l'altra (o le altre, se più di due) ma sempre e comunque una scelta tra le OptionButton presenti. Per non essere frainteso, anche con le CheckBox si istruiscono due condizioni da verificare, ma relative ad una stessa CheckBox,  indipendentemente dal fatto di avere più CheckBox sulla nostra UserForm e di averle o meno selezionate tutte; in un caso del genere, l'esecuzione di istruzioni legate ad ogni singola CheckBox, non viene influenzata dalle altre eventualmente selezionate. In pratica quindi, per ogni CheckBox, si sceglie se fare un qualche cosa oppure no, selezionandola o deselezionandola, come se fosse un'interruttore spento/acceso.

L'evento predefinito di una CheckBox è l'evento Click, nel quale evento è possibile inserire il codice di esecuzione istruzioni, mentre la proprietà che determina se la CheckBox è selezionata oppure no, è la proprietà Value, che di default è impostata a False (non selezionata).

Difficilmente però sfrutteremo l'evento Click di una CheckBox, ma useremo altri eventi (per esempio l'evento Click di un CommandButton) per far controllare il Value di una CheckBox : se sarà selezionata faremo eseguire certe istruzioni, altrimenti no (o viceversa), oppure potremo scegliere l'evento Change di una TextBox, o altri eventi di "oggetti" inseriti sulla UserForm. Parlando di una condizione da verificare (se la CheckBox è selezionata (cioè porta il classico segno di "spunta") oppure no), le nostre istruzioni dovranno prevedere il costrutto If....Then, e si controllerà lo stato del suo Value, così:

  • If CheckBox1.Value = True Then     (se la CheckBox è selezionata, allora....seguono istruzioni su  cosa fare)

è possibile, per valutare la condizione Vero/Falso, usare anche i numeri, che per la CheckBox però non sono 0 (False) e 1 (True), ma bensì -1 (True) e 0 (False), per cui l'esempio sopra può sostituirsi con

  • If CheckBox1.Value = -1 Then     (se la CheckBox è selezionata, allora....seguono istruzioni su  cosa fare)

  • oppure:

  • If CheckBox1.Value = 0 Then     (se la CheckBox NON è selezionata, allora....seguono istruzioni su  cosa fare)

Un esempio di applicazione di CheckBox lo trovate nel file allegato all'articolo "Database - Gestione Magazzino", dove, nella Form per il Carico/Scarico, viene controllato il valore dell'unica CheckBox attraverso l'evento Change della TextBox usata per la Ricerca dell'articolo in funzione delle lettere digitate.

Esiste poi una terza possibilità di verificare lo stato della CheckBox legata alla sua proprietà TripleState, che se impostata a True (di default è impostata a False), l' utente può scegliere tra i valori Null, True e False. Specificando dall'interfaccia utente lo stato Null, se un "controllo" è impostato su Null non è in grado di generare l'evento Click. Il valore Null viene visualizzato sotto forma di un pulsante ombreggiato (la casella è grigia).

Direi che questa opportunità non ho mai avuto la necessità di sfruttarla nei vari lavori svolti; basta lasciare impostata a False la proprietà TripleState e non utilizzare nessuna istruzione posta nell'evento Click della CheckBox. Comunque un'istruzione per modificare l'impostazione potrà essere inserita, ad esempio, all'apertura della UserForm, così:

  • Private Sub UserForm_Activate()
    CheckBox1.TripleState = True
    End Sub

in conseguenza di questa impostazione sarà poi possibile sfruttare un'istruzione che verifichi se la CheckBox avrà lo stato Null, così:

  • If IsNull(CheckBox1.Value) Then  (se la CheckBox ha lo stato Null, allora....seguono istruzioni su  cosa fare)

 

Per avere esempi di applicazioni di CheckBox, basta sfogliare le cartelle Opzioni o Preferenze che in genere accompagnano i programmi sul nostro computer, per vedere un'infinità di utilizzi. Questa sotto è la finestra "Generale" della Finestra Opzioni di Outlook Express, dove ad ogni CheckBox corrisponde una scelta : se la CheckBox sarà attivata (con il segno di "spunta"), l'azione descritta dal testo sarà attiva:

 

Un piccolo esercizio che ci consente di lavorare con le CheckBox, potrebbe essere il seguente:

  • Utilizzare una UserForm con più CheckBox per istruire una maschera di introduzione dati a livello statistico, in pratica realizziamo un Questionario. Ovviamente saranno le nostre necessità a definire il tipo di domande di cui chiediamo risposta, e la quantità di scelte (di CheckBox) per ogni domanda, che metteremo a disposizione.

In questo (banale) esercizio ipotizziamo di richiedere i gusti alimentari ad un gruppo di persone, e per ogni persona registreremo (tramite le CheckBox) le loro preferenze in un range di due alternative per domanda, che potranno essere scelte anche tutte e due, selezionando le opportune CheckBox.

Ad ogni "intervista" completata, registriamo le risposte date sul foglio di lavoro, sommando per ogni CheckBox selezionata, il valore di 1 nella cella all'uopo destinata. Alla fine dell'intervista otterremo il totale delle varie preferenze, ed il numero di quante persone hanno partecipato rispondendo. Vediamo la UserForm:

Nell'evento Click del pulsante Registra inseriremo le istruzioni che riporteranno nelle apposite celle i Valori relativi al Value di ogni CheckBox; poichè se una CheckBox è selezionata, il suo valore è -1, quindi numero negativo, nelle istruzioni faremo sommare il valore presente nella cella più il negativo del Value, infatti sappiamo che in matematica due negativi restituiscono un positivo. Aggiungiamo poi 1 alla cella destinata a contatore, che ci dirà tramite la textbox1 quante interviste abbiamo già registrato. Infine, a chiusura delle istruzioni, rendiamo a False il valore di tutte le CheckBox predisponendole per una nuova registrazione. Queste le due routine:

  • Nell'Activate della UserForm richiamiamo il valore che sarà in I5, la cella "contatore", e lo visualizziamo nella textbox1:

  • Private Sub UserForm_Activate()
    TextBox1 = [I5].Value
    End Sub

  • Nell'evento Click del CommandButton1 le istruzioni per il trasferimento dei valori sul foglio di lavoro:

  • Private Sub CommandButton1_Click()
    [e6] = [e6] + (-CheckBox1.Value)
    [f6] = [f6] + (-CheckBox2.Value)
    [e8] = [e8] + (-CheckBox3.Value)
    [f8] = [f8] + (-CheckBox4.Value)
    [e10] = [e10] + (-CheckBox5.Value)
    [f10] = [f10] + (-CheckBox6.Value)
    [e12] = [e12] + (-CheckBox7.Value)
    [f12] = [f12] + (-CheckBox8.Value)
    [e14] = [e14] + (-CheckBox9.Value)
    [f14] = [f14] + (-CheckBox10.Value)
    [I5] = [I5] + 1 
    ' si incrementa di 1 il totale delle registrazioni
    TextBox1 = [I5].Value
    'si aggiorna il totale nella textbox1
    For N = 1 To 10 
    'si deselezionano tutte le checkbox
    UserForm1.Controls("CheckBox" & N).Value = False
    Next
    End Sub

Come vedete non è difficile; sotto il foglio con una possibile impostazione e le celle corrispondenti alle istruzioni:

 

Buon lavoro.

prelevato sul sito www.ennius.altervista.org