Newsgroup: it.comp.appl.access
Titolo: esiste l'evento ESC?

 Inviato via 
http://usenet.libero.it

 grazie.
Bella domanda.
Qualcuno sa rispondere?

 Dinho
infatti è quello che sono riuscito a fare io:
Private Sub Form_KeyPress(KeyAscii As Integer)
If KeyAscii = 27 Then 'il 27 corrisponde a ESC
    successivo.Enabled = True
    precedente.Enabled = True
    primo.Enabled = True
    ultimo.Enabled = True
    aggiungi.Enabled = True
    elimina.Enabled = True
    CHIUDI.Enabled = True
End If
End Sub
probabilmente è una soluzione "amatoriale" ma funziona e non ho trovato
altro al momento.


 altro al momento.
Puoi usare la costante vbKeyEscape...
Ma a me il tuo codice non funziona:
Private Sub Form_KeyPress(KeyAscii As Integer)
If KeyAscii = 27 Then
   Docmd.close
End If
End Sub
Cos'ha che non va questa rountine?

Cos'ha che non va questa rountine?
e' troppo corta...che ce fai? :))))))))))
Ciauz


Poi però resta la rotellina del mouse... e qui vba da solo non basta,
bisogna ricorrere al subclassing per intercettarne il movimento ed
eventualmente annullarne l'evento, ma purtroppo access (almeno la versione
2000) non permette di fare questo subclassing, bisogna ricorrere a dll
esterne scritte ad esempio in vb.
Oppure una soluzione più semplice potrebbe essere quella di dichiare una
variabile boolean a livello di modulo del form che annulli o meno l'evento
beforeupdate, qualcosa del genere:
Private CantUpdate As Boolean
Private sub Form_Open(Cancel As Integer)
CantUpdate = False
End
Private sub Form_Dirty(Cancel As Integer)
CantUpdate = True
End
' Annulla la chiusura del form generando errori
' da gestire su eventueli Docmd.close sul form corrente
Private sub Form_BeforeUpdate(Cancel As Integer)
If CantUpdate Then
    Dim ret as msgboxresult
    ret =msgbox ("salvare le modifiche al record corrente?",vbyesno)
    If ret = VbNo then
        Cancel = True
    else
        CantUpdate =False
    end if
end if
End
' la gestione della tastiera potrebbe anche essere trascurata
Private Sub Form_KeyPress(KeyAscii As Integer)
If KeyAscii = 27 Then 'il 27 corrisponde a ESC
    Call cmdAnnulla_Click
End If
End Sub
Private sub cmdSalva_Click()
    If CantUpdate Then
        Docmd.RunCommand AcCmdsaveRecord
        CantUpdate = False
    End If
End
Private sub cmdAnnulla_Click()
    If CantUpdate Then
        Me.Undo
        CantUpdate = False
    End If
End
Ciao, omnitow

 e' troppo corta...che ce fai? :))))))))))
?!?
Voglio chiudere una maschera alla pressione di ESC... mi sembra chiaro...

 problemi se usasse sempre i pulsanti, ma come intercetto l'ESC?
[...]
    Ammesso che io abbia capito bene cio' che intendi: cosi' impedisci
all'utente di... pentirsi! E sara' costretto a salvare dati che lui
giudica errati. Oppure potrebbe non ricordare quali dati ha modificato e
non potrebbe quindi ripristinare i valori corretti. Cmq... invece di
porti il problema del tasto Esc potresti fare cio' che effettivamente ti
interessa fare: salvare qualsiasi cosa digiti l'utente. Ripeto: ammesso
che sia questo cio' che intendi ottenere.
Option Base 0
Option Compare Database
Option Explicit
Private Sub SaveData()
  Me.Application.DoCmd.RunCommand acCmdSave
  ' Solo debug:
  ' Dimostra visivamente che la routine e' stata eseguita.
  Dim lngBackColor As Long
  lngBackColor = Me.Section(acDetail).BackColor
  Me.Section(acDetail).BackColor = vbRed
  Me.Repaint
  Me.Section(acDetail).BackColor = lngBackColor
End Sub
Private Sub Form_KeyDown( _
  ByRef KeyCode As Integer _
, ByRef Shift As Integer)
  If (KeyCode = vbKeyDelete) Then
    SaveData
  End If
End Sub
Private Sub Form_KeyPress( _
  ByRef KeyAscii As Integer)
  If ((KeyAscii = vbKeyBack) Or (KeyAscii >= 32)) Then
    SaveData
  End If
End Sub
--
    (Facci sapere se ed eventualmente come hai risolto. Grazie.)
--
Ciao :o)
Maurizio
--------
?SPQR(C)
 X
--------