Guide e Tutorials:indexed | |||||||||||
Creare e distruggere oggetti di nuova creazione (Tutorial completo) Può essere necessario talvolta creare controlli aggiuntivi del tutto simili a quelli già presenti nell'applicazione. Prendiamo il caso di un semplice programma che attacca bigliettini adesivi sulla form: non sappiamo di quanti biglietti l'utente necessiterà nel corso della sessione della nostra applicazione. Ogni volta che sarà richiesto dovremo costruirne uno nuovo. Il segreto di tutto sta però nel costruire in fase di progettazione un oggetto uguale a quello che ci servirà e riprodurlo tale e quale ad ogni richiesta dell'utente. Cominciamo innanzitutto ad aprire un nuovo progetto EXE Standard. Su di esso trasciniamo un controllo Label. Possiamo anche evitare di impostarne le proprietà tramite la finestra relativa in quanto tutto verrà determinato dal codice. A questo punto sarà necessario cliccare col tasto destro del mouse sul controllo Label e selezionare dal popup-menu che comparirà la voce 'Copia' e subito dopo fare la stessa cosa sulla form, tranne per il fatto che questa volta si sceglierà l'opzione 'Incolla'. Apparirà una finestra di messaggio uguale alla seguente: Sarà opportuno selezionare 'Si' in modo da avere a disposizione appunto una matrice di controlli. Verrà dunque modificata la proprietà Name di Label1 in Label1(0) ed allo stesso tempo sarà creata una nuova Label col nome Label1(1). Quest'ultima è in eccesso in base alla nostra applicazione: è necessario cancellarla. Adesso, prima di iniziare a vedere il codice, inseriamo sul piano un controllo CommanButton, attraverso il quale l'utente sarà in grado di creare un nuovo bigliettino ed un secondo attraverso cui si potrà staccare il biglietto. Il codice da inserire in Form1 è davvero semplice ed intuibile. Dobbiamo innanzitutto creare la sottoprocedura di creazione dei biglietti, poi quella che dalla pressione del CommandButton ci riporterà alla prima ed infine varie routine per la gestione dei biglietti già creati. Denominiamo dunque la nuova sottoprocedura CreaBiglietto:
senza alcun parametro in quanto non necessario. Adesso, per evitare di ripetere i controlli diamo vita ad una nuova variabile intera, che chiamiamo 'c', in modo che alla pressione di Command1 non venga creato ogni volta la stessa Label, ottenendo un messaggio del tipo: Si otterrebbe lo stesso errore facendo partire la variabile c da 0. Label1(0) infatti esiste già ed è la Label dalla quale costruiamo tutte le altre etichette. Sarà sufficiente quindi impostare c come segue:
proprio perchè al momento in cui viene applicata, c non ha alcun valore assegnato e quindi prende il valore 0. In questo modo c funge da contatore del numero di Label presenti sul piano. Adesso possiamo finalmente caricare la nuova Label:
ed in seguito impostare tutte le caratteristiche del caso. Chiudiamo la sottoprocedura con End Sub:
In questo modo l'etichetta appena creata avrà le dimensioni standard di 800x1400, un colore dato dal codice &H00C0FFFF& (un giallo spento), e soprattutto il posizionamento sarà sempre più o meno al centro, in base alle dimensioni della form. Terminata questa sottoprocedura, analizziamo l'evento Click di Command1:
tramite il quale richiamiamo il codice di creazione di una nuova Label indicato in CreaBiglietto. Ora è venuto il momento di vedere come gestire le etichette. Iniziamo col posizionamento di ognuna di esse. Nell'evento MouseDown di Label1, fissiamo le coordinate del punto nel quale si preme il tasto sinistro del mouse e modifichiamo il puntatore del mouse:
Le due variabili Xiniziale, Yiniziale ed Indice non hanno valore soltanto in questa sottoprocedura. Sarà quindi necessario estendere la loro area di validità dichiarandole all'inizio del codice, in questo modo:
Adesso, nell'evento MouseMove di Label1 recuperiamo l'indice dell'etichetta sulla quale è stato cliccato. Dobbiamo fare un confronto tra il punto iniziale (Xiniziale ed Yiniziale) indicato dall'evento MouseDown e quello indicato dal valore X ed Y nell'evento MouseMove:
Per evitare che il puntatore rimanga vbSizeAll anche sulla form, includiamo nel codice dell'evento Load di Form1 il seguente codice:
In questo modo avremo tante etichette da organizzare come vogliamo. Nel caso in cui si voglia distruggere un oggetto appena creato, evento Click di Command2:
dove è necessario inserire la gestione dell'errore nel caso in cui non si sia preventivamente cliccato su alcuna etichetta e quindi il valore della variabile Indice non indichi un controllo da noi creato. |
Archivio:ndexed | ||||
Lezioni | Commenta questa lezione | Invia la tua guida | Avviso per le nuove lezioni | Proponi un argomento |
Visual Basic Italia© copyright 2000 - tutti i diritti riservati |