Il
progetto fino a questa lezione sviluppato si limita alle interazioni semplici
con l'utente: reagire ai click sui pulsanti o alla selezione di un brano
dall'elenco sulla sinistra: introdurremo in questa lezione una primaria
gestione dei pulsanti ovvero stati e azioni legate ai pulsanti in funzione
del contesto. In particolare il pulsante Modifica brano effettuerà
una triplice azione:
- Abilitarsi alla selezione di un brano e disabilitarsi alla cancellazione
del brano scelto;
- Attivazione della fase di modifica per permettere il cambiamento dei
dati presenti nelle caselle di testo;
- Accettazione dei dati immessi e quindi salvataggio degli stessi nell'archivio.
La prima delle azioni è naturalmente la più semplice; vediamo
subito come è gestita:
- Private blnModifica As Boolean
- Private Sub Form_Load()
- ... Codice trattato nelle lezioni precedenti ...
- cmdModificaBrano.Enabled = False
- cmdEliminaBrano.Enabled = False
- blnModifica = False
- ... Codice trattato nelle lezioni precedenti ...
- End Sub
Dichiareremo in testa al codice del form una variabile di nome blnModifica
che verrà utilizzata successivamente per identificare la fase di
modifica, compresa tra il click sul pulsante modifica ed il successivo
salvataggio.
All'interno dell'evento Load del Form - senza
eliminare il codice precedentemente esposto - aggiungeremo le righe
5-7; la prima disattiverà inizialmente il pulsante cmdModifica,
mentre la seconda di queste era stata eliminata nella lezione precedente
e disattiverà il pulsante di eliminazione all'avvio del programma,
infine la riga 7 inizializzerà il valore della variabile blnModifica.
- Private Sub lstBrani_Click()
- If lstBrani.ListIndex >= 0 Then
- ... Codice trattato nelle lezioni precedenti
...
- cmdEliminaBrano.Enabled
= True
- cmdModificaBrano.Enabled
= True
- End If
- End Sub
Così alla selezione di un brano dall'elenco riattiveremo i due
pulsanti precedentemente disattivati.
- Private Sub cmdEliminaBrano_Click()
- If lstBrani.ListIndex >= 0 Then
- If MsgBox("Sei sicuro di voler eliminare il
brano" _
- & vbNewLine & Trim$(udtDiscoCorrente.strTitoloBrano)
_
- & "?", vbCritical Or vbYesNo Or
vbDefaultButton2, _
- "Elimina brano") = vbYes Then
- udtDiscoCorrente.blnEliminato
= True
- Put #intFileDati, udtDiscoCorrente.intIndice,
udtDiscoCorrente
- lstBrani.RemoveItem lstBrani.ListIndex
- cmdEliminaBrano.Enabled
= False
- cmdModificaBrano.Enabled
= False
- End If
- End If
- End Sub
L'azione del pulsante cmdEliminaBrano è stata già
trattata nella lezione precedente; ad essa aggiungeremo due semplici righe
che si occuperanno di disattivare i due pulsanti al termine della cancellazione
del brano selezionato. Si occuperà di riattivarli la funzione precedentemente
vista legata alla selezione di un brano.
Resta da trattare la fase di modifica che sarà
richiamata in occasione del primo click sul pulsante Aggiungi oppure
sul pulsante Modifica; nel primo caso saranno anche svuotate tutte
le caselle di testo. Vediamo inizialmente il primo di questi due casi:
l'operazione di inserimento, aggiornata con le ultime modifiche.
- Private Sub cmdAggiungiBrano_Click()
- If blnModifica = False Then
- txtTitoloBrano.Text = ""
- txtAutoreBrano.Text = ""
- txtTitoloCD.Text = ""
- txtNumeroTraccia.Text =
""
- txtAnnoPubblicazione.Text
= ""
- txtNote.Text = ""
- cmdAggiungiBrano.Caption
= "S&alva brano"
- txtTitoloBrano.SetFocus
- Else
- With udtDiscoCorrente
- .intIndice = LOF(intFileDati)
/ Len(udtDiscoCorrente) + 1
- .strTitoloBrano = txtTitoloBrano.Text
- .strAutore = txtAutoreBrano.Text
- .strTitoloCD = txtTitoloCD.Text
- .intTraccia = CInt(txtNumeroTraccia.Text)
- .intAnnoPubblicazione = CInt(txtAnnoPubblicazione.Text)
- .strNote = txtNote.Text
- .blnEliminato = False
- Put #intFileDati, .intIndice,
udtDiscoCorrente
- lstBrani.AddItem
Trim$(.strTitoloBrano)
- lstBrani.ItemData(lstBrani.NewIndex)
= .intIndice
- End With
- cmdAggiungiBrano.Caption
= "&Aggiungi brano"
- End If
- blnModifica = Not blnModifica
- txtTitoloBrano.Locked = Not blnModifica
- txtAutoreBrano.Locked = Not blnModifica
- txtTitoloCD.Locked = Not blnModifica
- txtNumeroTraccia.Locked = Not blnModifica
- txtAnnoPubblicazione.Locked = Not blnModifica
- txtNote.Locked = Not blnModifica
- cmdEliminaBrano.Enabled = Not blnModifica
- cmdModificaBrano.Enabled = Not blnModifica
- lstBrani.Enabled = Not blnModifica
- End Sub
Un primo click sopra il pulsante Aggiungi farà scattare
la fase di modifica; basti ricordare che inizialmente la variabile blnModifica
ha assunto valore Falso (riga 7) mentre cambia di valore nel momento in
cui viene avviata la fase di modifica. Così, all'avvio della fase
di modifica tutti i campi saranno svuotati (righe 35-40) e lo stesso pulsante
cambierà la sua etichetta in Salva brano.
Nel caso in cui fossimo già nella fase di modifica, il click sul
pulsante Aggiungi farà scattare l'operazione di salvataggio vera
e propria già trattata nelle lezioni precedenti. In maniera analoga,
sarà modificata l'etichetta del pulsante in Aggiunti brano.
Le righe 54 e 55 sono state aggiunte al codice preesistente per tenere
l'elenco lstBrani sempre aggiornato, senza la necessità
di chiudere il programma ei riavviarlo come nelle lezioni precedenti.
Ogni click sul pulsante Aggiungi invertirà il valore della variabile
blnModifica (riga 59) ed i controlli si adatteranno di conseguenza: le
caselle di testo saranno sbloccate (righe 60-65), mentre i pulsanti Elimina
e Modifica e l'elenco con i brani verranno bloccati all'avvio dell'operazione
di inserimento. Al termine lo stato di questi controlli verrà invertito,
in funzione del cambiamento del valore di blnModifica.
La gestione del pulsante Modifica è molto
similare alla precedente:
- Private Sub cmdModificaBrano_Click()
- If blnModifica = False Then
- cmdModificaBrano.Caption
= "Salva &Modifiche"
- txtTitoloBrano.SetFocus
- Else
- With udtDiscoCorrente
- .strTitoloBrano
= txtTitoloBrano.Text
- .strAutore =
txtAutoreBrano.Text
- .strTitoloCD
= txtTitoloCD.Text
- .intTraccia
= Int(Val(txtNumeroTraccia.Text))
- .intAnnoPubblicazione
= Int(Val(txtAnnoPubblicazione.Text))
- .strNote = txtNote.Text
- .blnEliminato
= False
- Put #intFileDati,
.intIndice, udtDiscoCorrente
- lstBrani.List(lstBrani.ListIndex)
= Trim$(.strTitoloBrano)
- End With
- cmdModificaBrano.Caption
= "&Modifica brano"
- End If
- blnModifica = Not blnModifica
- txtTitoloBrano.Locked = Not blnModifica
- txtAutoreBrano.Locked = Not blnModifica
- txtTitoloCD.Locked = Not blnModifica
- txtNumeroTraccia.Locked = Not blnModifica
- txtAnnoPubblicazione.Locked = Not blnModifica
- txtNote.Locked = Not blnModifica
- cmdEliminaBrano.Enabled = Not blnModifica
- cmdAggiungiBrano.Enabled = Not blnModifica
- lstBrani.Enabled = Not blnModifica
- End Sub
All'avvio della fase di modifica (riga 72) i vari controlli con le informazioni
saranno già stati aggiornati, durante la selezione del brano dall'elenco;
resta quindi solo da cambiare l'etichetta del pulsante in Salva Modifiche.
Al termine dell'operazione di modifica i dati delle varie caselle saranno
ricopiati nella variabile udtDiscoCorrente (righe 76-83) che, lo
ricordiamo, contiene le informazioni recuperate dal file con l'ultima
estrazione. La stessa sarà salvata all'interno del file con una
semplice istruzione Put, accompagnata dal numero del record da scrivere
(riga 84). Sarà anche aggiornato l'elenco sulla sinistra con il
nuovo titolo del brano. Il pulsante di modifica riprenderà la sua
etichetta iniziale Modifica brano.
Come già visto nell'evento precedente, in funzione della fase
in cui ci troviamo (modifica o salvataggio) i controlli saranno bloccati
o sbloccati.
Poiché sarà compito dei pulsanti gestire lo stato di blocco
delle varie caselle di testo in funzione della fase in cui ci si trova,
sarà opportuno inizializzare lo stato di blocco di tutte le caselle
di testo impostando la proprietà Locked su False durante
la fase di progettazione.
|