Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questa procedura dettagliata illustra come dichiarare e generare eventi per una classe denominata Widget. Dopo aver completato i passaggi, è possibile leggere l'argomento complementare Procedura dettagliata: Gestione degli eventi, che illustra come usare gli eventi di Widget oggetti per fornire informazioni sullo stato in un'applicazione.
La classe Widget
Si supponga per il momento che si abbia una classe Widget. La Widget classe ha un metodo che può richiedere molto tempo per l'esecuzione e si vuole che l'applicazione sia in grado di inserire un qualche tipo di indicatore di completamento.
Naturalmente, è possibile fare in modo che l'oggetto Widget visualizzi una finestra di dialogo con percentuale di completamento, ma poi ci si blocca con quella finestra di dialogo in ogni progetto in cui è stata usata la Widget classe . Un buon principio della progettazione di oggetti consiste nell'consentire all'applicazione che usa un oggetto di gestire l'interfaccia utente, a meno che l'intero scopo dell'oggetto non sia gestire una maschera o una finestra di dialogo.
Lo scopo di Widget è eseguire altre attività, quindi è preferibile aggiungere un PercentDone evento e consentire alla routine che chiama Widgeti metodi di gestire tale evento e visualizzare gli aggiornamenti dello stato. L'evento PercentDone può anche fornire un meccanismo per annullare l'attività.
Per compilare l'esempio di codice per questo argomento
Aprire un nuovo progetto applicazione Windows di Visual Basic e creare un modulo denominato
Form1.Aggiungere due pulsanti e un'etichetta a
Form1.Assegnare un nome agli oggetti come illustrato nella tabella seguente.
Oggetto Proprietà Impostazione Button1TextAvvia Attività Button2TextAnnulla Label(Name),TextlblPercentualeCompletata, 0 Scegliere Aggiungi classe dal menu Progetto per aggiungere una classe denominata
Widget.vbal progetto.
Per dichiarare un evento per la classe Widget
Usare la
Eventparola chiave per dichiarare un evento nellaWidgetclasse . Si noti che un evento può avere argomentiByValeByRef, come dimostra l'eventoWidgetPercentDone.Public Event PercentDone(ByVal Percent As Single, ByRef Cancel As Boolean)
Quando l'oggetto chiamante riceve un PercentDone evento, l'argomento Percent contiene la percentuale di completamento dell'attività. L'argomento Cancel può essere impostato su True per annullare il metodo che ha generato l'evento.
Annotazioni
È possibile dichiarare argomenti di evento esattamente come si fanno argomenti di routine, con le eccezioni seguenti: Gli eventi non possono avere Optional o ParamArray argomenti e gli eventi non hanno valori restituiti.
L'evento PercentDone viene generato dal LongTask metodo della Widget classe .
LongTask accetta due argomenti: la durata di tempo in cui il metodo finge di lavorare e l'intervallo di tempo minimo prima che LongTask si interrompa per sollevare l'evento PercentDone.
Per generare l'evento PercentDone
Per semplificare l'accesso alla proprietà
Timerusata da questa classe, aggiungere un'istruzioneImportsall'inizio della sezione delle dichiarazioni del modulo di classe, sopra l'istruzioneClass Widget.Imports Microsoft.VisualBasic.DateAndTimeAggiungere il codice seguente alla classe
Widget:Public Sub LongTask(ByVal Duration As Single, ByVal MinimumInterval As Single) Dim Threshold As Single Dim Start As Single Dim blnCancel As Boolean ' The Timer property of the DateAndTime object returns the seconds ' and milliseconds that have passed since midnight. Start = CSng(Timer) Threshold = MinimumInterval Do While CSng(Timer) < (Start + Duration) ' In a real application, some unit of work would ' be done here each time through the loop. If CSng(Timer) > (Start + Threshold) Then RaiseEvent PercentDone( Threshold / Duration, blnCancel) ' Check to see if the operation was canceled. If blnCancel Then Exit Sub Threshold = Threshold + MinimumInterval End If Loop End Sub
Quando l'applicazione chiama il LongTask metodo , la Widget classe genera l'evento PercentDone ogni MinimumInterval secondo. Quando l'evento viene restituito, LongTask verifica se l'argomento Cancel è stato impostato su True.
Qui sono necessarie alcune dichiarazioni di non responsabilità. Per semplicità, la LongTask procedura presuppone che tu sappia in anticipo quanto tempo richiederà l'attività. Questo non è quasi mai il caso. Dividere le attività in blocchi di dimensioni pari può essere difficile e spesso ciò che conta più per gli utenti è semplicemente la quantità di tempo che passa prima di ottenere un'indicazione che sta accadendo qualcosa.
In questo esempio potrebbe essere stato individuato un altro difetto. La Timer proprietà restituisce il numero di secondi trascorsi dalla mezzanotte, pertanto l'applicazione viene bloccata se viene avviata poco prima della mezzanotte. Un approccio più attento alla misurazione del tempo richiederebbe condizioni limite come questa in considerazione o evitarle completamente, usando proprietà come Now.
Ora che la Widget classe può generare eventi, è possibile passare alla procedura dettagliata successiva.
Procedura dettagliata: la gestione degli eventi illustra come usare WithEvents per associare un gestore eventi all'evento PercentDone .