OCX in primo piano (a cura di Vito Perrotta): | ||||||||||||||||||||||||||||||
Terza (ed ultima) lezione: Completiamo il nostro OCX: Riprendiamo la costruzione del nostro OCX. Va subito detto che l'utilità di un OCX, ovvero il valore aggiunto che tale OCX possiede rispetto all'oggetto standard di partenza, deve essere valutata molto attentamente. Infatti, se ci accingiamo a creare un OCX, le funzionalità di cui lo doteremo devono giustificare lo sforzo di codifica che dovremo sostenere. Prendiamo ad esempio il nostro ComboOCX. E' vero che siamo partiti da una ComboBox standard e quindi abbiamo "ereditato" tutti gli eventi della ComboBox. Questi, però, restano interni allo UserControl. In altre parole, quando scegliamo un Item del ComboOCX, l'evento cboBase_Click() rimarrà "imprigionato" dentro lo UserControl. A meno di non generare un evento di risposta verso l'esterno, verso, cioè, l'applicazione che sta utilizzando il nostro ComboOCX. Per di più, dovremo dotare il nostro ComboOCX di un metodo Additem che svolga la stessa funzione dell'Additem della ComboBox cboBase. In poche parole dobbiamo implementare l'interfaccia del nostro nuovo OCX. L'interfaccia di un oggetto, sia esso un OCX o un componente COM, è proprio l'insieme di Eventi, Metodi e Proprietà che tale oggetto possiede. Proviamo a dotare il mostro ComboOCX del metodo Additem. Questo metodo, come è noto, permette di inserire un elemento nella lista relativa in una ComboBox e/o in una ListBox. I metodi, per gli OCX, sono delle normali Sub, pubbliche (altrimenti non potrebbero essere "viste" all'esterno). Inseriamo perciò nella finestra codice del nostro OCX queste istruzioni :
Come possiamo vedere non abbbiamo fatto altro che ricarrozzare il metodo Additem della ComboBox originale cboBase. Visto che passeremo al metodo Additem delle semplici stringhe, il parametro
di cui dotiamo la sub basta allo scopo. Chiudiamo la la progettazione dell'OCX e traferiamoci su frmStub. A questo punto il nostro OCX può esporre il metodi Additem. Inseriamo le seguenti istruzioni nella Form_Load :
Avremo sicuramente notato che queste istruzioni, una volta mandato in esecuzione il progetto, effettivamente inseriscono gli item desiderati. Ritorniamo alla finestra di progettazione dell'OCX. Inseriamo una proprietà Text in modo da permettere la "pulizia" della ….. cboBase.Text:
Per poter ottenere il funzionamento corretto dobbiamo aver incluso questa riga nelle general dell'OCX :
Passiamo al form frmStub. La Form_Load() potrebbe assumere questa forma
Ritorniamo al nostro OCX. Implementiamo la risposta all'evento Click() su cboBase. Abbiamo detto che per poter far questo dobbiamo generare una risposta verso l'esterno. Ecco cosa sono gli Eventi. Per prima cosa inseriamo nelle general questa dichiarazione :
Questo indica che è previsto un evento, di nome Click() che potrà essere generato durante l'applicazione. Nella procedura cboBase_Click() è il punto giusto perché questo si verifichi.
Otterremo il verificarsi di un evento Click dal nostro OCX verso l'esterno tutte le volte che avverrà l'evento Click sulla cboBase !! Con RaiseEvent "scateniamo" l'evento. Il risultato sarà anche che il nostro ocx, nel form che lo utilizza (frmStub) avrà una procedura Click in cui codificare le azioni del caso :
Passiamo ora alla parte più tecnica della lezione. Dotiamo il nostro OCX del metodo Resort che, riordina gli elementi della combo in base al loro valore numerico.
La chiamata al metodo Resort , nel frmStub è estremamente semplice :
Il progetto dell'OCX è terminato. Per renderlo utilizzabile da altre applicazioni bisogna generare il relativo file .ocx . Dal menu File di VB scegliere la voce Make ComboOCX.ocx (selezionare il progetto ComboOCX prima ). Ancora una considerazione : abbiamo progettato e creato un OCX molto scarno. Di tutti i metodi eventi e proprietà della cboBase abbiamo esportato solo l'estrememente indispensabile all'uso. Potrebbe essere una buona esercitazione esportare anche quelle proprietà tipo Font, BackColor, ForeColor ecc. che completano ogni controllo standard. Quanto visto fino ad ora, però, ci ha permesso di conoscere un altro aspetto delle potenzialità della programmazione VB. Grazie per l'attenzione.
|