On 13/06/06, Paolo Mantovani <[EMAIL PROTECTED]> wrote:
Alle 17:52, martedì 13 giugno 2006, Michele Zarri ha scritto:
> Ciao,
>
> Ho un piccolo problemino che vi vorrei sottoporre: ho creato una
finestra
> di dialogo con un paio di controlli piu' un pulsante "OK" e uno
"Cancel".
>
> Prima che la finestra si chiuda devo compiere qualche operazione percio'
ho
> creato una subroutine che ho associato all'evento "mouse release" sul
tasto
> OK e tutto funziona.
Una piccola considerazione:
L'evento mouse release va bene ma l'evento "on action" è meglio
Da quanto mi risulta infatti, quest'ultimo è stato concepito proprio come
astrazione dell'evento predefinito di un pulsante.
In effetti per gestire al meglio l'evento mouse button release dovresti
controllare pure il pulsante premuto, e il numero di clicks
Cosa che non è necessaria con l'evento "on action"
>
> Purtroppo pero' la finestra di dialogo si chiude anche se l'utente preme
il
> tasto invio (il pulsante OK e' quello di default), solo che in questo
caso
> il mio codice non viene eseguito.
Ed è cosa buona e giusta infatti :-)
>
> Esiste un metodo veloce per catturare l'evento chiusura della finestra
di
> dialogo cosi' che possa eseguire il codice che voglio? Mi piacerebbe
> evitare di mettere un key listener anche perche' non saprei a quale
> controllo associarlo.
Niente di tutto ciò.
Per gestire i dialoghi di openoffice si opera come con i dialoghi di tipo
msgbox:
In pratica:
--------------------------------
iDlgResult = oDlg.Execute 'il dialogo viene mostrato:
'il flusso di esecuzione rimane bloccato fino
'a che il dialogo non viene chiuso dall'utente
If iDlgResult = 1 Then 'l'utente ha premuto OK (o invio)
'fai qualcosa di utile qui
Else
'l'utente ha premuto annulla (o ESC)
'chiudi la faccenda senza fare nulla
End If
----------------------------
ciao
Paolo M
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
Ciao Paolo,
Grazie per la pronta risposta.
L'evento "on action" pare interessante, ma da programmatore naif quale sono
di solito uso la GUI per associare funzioni agli eventi e percio' preferisco
usare gli eventi predefiniti nel secondo tab delle proprieta' di un
controllo. L'unico caso in cui sono stato costretto a ricorrere a metodi
piu' consoni ad un programmatore e' stato per catturare l'evento doppio
click che mi sono dovuto fare a manina.
Provo pero' a spiegare meglio il problema.
Normalmente seguo sempre la strada che indichi tu nell'esempio, cioe'
If oMyDialog.execute() Then
' l'utente ha premuto Ok o invio
Else
' l'utente ha premuto cancel
End If
Ma in questo caso particolare ho bisogno di verificare che uno dei campi sia
stato riempito correttamente e percio' prima di chiudere la finestra di
dialogo e ridare il controllo alla routine che ha lanciato la finestra di
dialogo eseguo un test e se non sono soddisfatto prevengo la chiusura
restituendo il focus al campo incriminato. Naturalmente tu mi potresti dire:
perche' non fai il test quando il campo incriminato perde il focus? e la mia
risposta e' che ho provato e l'ho trovato poco amichevole per l'utente.
Spero di essermi spiegato meglio :)
Ciao,
Michele