Newsgroup: it.comp.appl.access
Titolo: SendKeys e OnFocus

Ciao a tutto il NG e buon week end (intanto)
Una domanda e una precisazione : continuo a leggere in questo NG e in altri il consiglio di non usare sendkeys in access. Mi domandavo a quali problemi si potrebbe andare incontro (anche perchè io ne ho fatto un uso massiccio, sostituendo i pulsanti nativi, usati non visibili, con etichette non associate ed usando sendkeys per invocare l'evento on click del pulsante).
La domanda è questa : avrei necessità di assegnare una duplice funzione al tasto INVIO. Per es. 'se premi invio e il cursore è in quella casella, allora fai questo, se invece non è in quella casella, fai quest'altro'. Come faccio a stabilire la proprietà focus di una casella di testo? Me.miacasella.onfocus = true? Me.miacasella.ongetfocus = true?
Cercavo di farlo dalla proprietà onkeyup della maschera e non della casella. Mi da sempre errore (giustamente visto che è un uso improprio) ma non trovo la scappatoia.....Mi date una mano? Grazie
Ps: uso Access 2003 su Windows XP
-- 
Questo articolo e` stato inviato dal sito web 
http://www.nonsolonews.it

 ha scritto nel messaggio 
news:g03ift$8bj$1...@news.nonsolonews.it...

Provo a dire la mia, anche se non mi sembra tanto valida.
Io creerei tante variabili booleane quanti sono i controlli della maschera e 
li metto in ON quando il relativo controllo ha il focus ed in OFF quando lo 
perde. In questo modo al verificarsi dell'invio puoi sapere con precisione 
dove era il cursore.
Ciao
Antonio

antonio ha scritto:

Ciao Antonio, forse la situazione è più semplice del previsto, xchè il problema si può così scomporre: 1 casella di testo non associata nell'intestazione della maschera (è la mia casella di ricerca per la maschera corrente) e i controlli del corpo (che sono la visualizzazione in maschere continue dei dati filtrati). Ora la sequenza è questa: apro maschera, setfocus sulla casella non associata (tstata della maschera), digito stringa, INVIO, access cerca la stringa, la trova (speriamo!) e pone set focus sulla stringa trovata (corpo della maschera). Premo INVIO di nuovo e lui mi apre la maschera dettagli. Quindi i casi sono solo due:o premo invio e sono sulla ricerca (=filtro), o sono sulle righe e apro la nuova maschera. Ora provo con i booleani. Grazie


> improprio) ma non trovo la scappatoia.....Mi date una mano? Grazie
Forse non ho capito bene il problema, ma non ti basterebbe usare una if?
if me.NomeTextBox = "questo" then
  esegui il codice desiderato
elseif me.NomeTextBox = "quest'altro" then
  esegui quest'altro codice
end if
-- 
Ciao
Geppo 


se in me.nomtextbox conserva il nome del "previous" activecontrol si gli 
basta.
-- 
ac
y-1=x

 gli basta.
Già, una cosa del genere?
dim vName
vName = 
activecontrol.name
if keycode = vbkeyreturn then
if vName = NomeTextbox then
   "esegui il codice"
elseif vName = altroNomeTextBox then
   "esegui quest'altro codice"
end if
end if
Grazie Maestro :-)
-- 
Ciao
Geppo 


uhmmm....non proprio
il nome lo deve conservare sull' afterupdate (o anche before o 
anche,forse, exit) del controllo "master".
il test sul nome conservato lo deve fare sul controllo che scatena la 
"reazione". tra l'altro potrebbe usare la proprieta' tag di ques'ultimo 
per gestire la bisogna.
i.e
-->su controllo tipoconserva (evento appropriato)
=conservacirio(me)
-->su modulo
function conservacirio(pform)
pform.controllotipoconserva.tag = pform.activecontrol.controlname
end function
-->su evento click di controllotipoconserva
if controllotipoconserva.tag = "pelati" then
.......
elseif controllotipoconserva.tag = "passata" then
.....
end if
--> o fatta una cosa da furbi
eval "funz_" & controllotipoconserva.tag & "()"
s.e. & o.
-- 
ac
y-1=x


L'avevo detto che forse non avevo centrato il problema. :-)
Io avevo capito che Fair87 avesse bisogno di gestire il tasto invio in base 
alla casella di testo in cui si trovava, ecco perchè avevo suggerito quel 
codice da inserire sotto l'evento KeyDown della Form.
p.s.: sti giorni sto proprio infissa con sto KeyDown. :-D
-- 
Ciao
Geppo 

geppo ha scritto:

Scusate il ritardo ma stavo lavorando a delle pagine ASP e mi sono perso...
Intanto grazie per le tante risposte. Ci ragione su e poi provo un po' tutto. Per chiarezza espongo il problema completo(che magari mi spiego stavolta)
Scenario: maschera continua con dati anagrafici (in access2003 e winXP) nel corpo della form.  Casella non associata nell'intestazione della form.
Sequenza : apro la form, set focus su casella non associata, digito il testo da cercare, premo invio, access trova il record giusto, set focus sull'id del record, premo ancora invio, access apre i dettagli del record selezionato.
Ho usato l'evento onkeyup per la casella (=ricerca) e lo stesso evento (ma sulla form) per l'apertura dettagli
Vi posto i due codici (non sono perfettamente funzionanti)
ID = variabile pubblica del modulo
StrSql_tmp = variabile globale
NomeTMP = variabile globale
TxtRicerca = casella non associata nell'intestazione
Evento maschera
Case vbKeyReturn
On Error GoTo Err_desc
 
ID = Me.IdCLiente           
Me.Requery            
If IsNull(Me.TxtRicerca) = True Then                
If NomeTMP = "SCARICO_TESTATA" Then
KeyCode = 0                    
Dim Nome As Integer                    
Nome = ID
DoCmd.Close acForm, "CLIENTI_LISTA"
DoCmd.OpenForm "SCARICO_TESTATA"
Forms!SCARICO_TESTATA.TxtCliente = Nome
Forms!SCARICO_TESTATA.TxtCliente.SetFocus
 
Else
 
KeyCode = 0                    
GlobCli = Me.IdCLiente.Value                             
strSQL_TMP = "SELECT * "
strSQL_TMP = strSQL_TMP & "FROM ANAGRAFICA_CLIENTI "
strSQL_TMP = strSQL_TMP & "WHERE [IdCLiente]=" & ID & " "
strSQL_TMP = strSQL_TMP & "ORDER BY ANAGRAFICA_CLIENTI.RagioneSocialeInvio "
strSQL_TMP = strSQL_TMP & "WITH OWNERACCESS OPTION;"
DoCmd.OpenForm "CLIENTI_SCHEDA"                                      
End If                
End If
Evento casella
Case vbKeyReturn            
Me.Requery            
If Len(Me.TxtRicerca) <> 0 Then            
KeyCode = 0                
Dim Rst As Recordset                
If Me.TxtRicerca.BorderColor = 255 Then                    
Dim StrSql As String                    
StrSql = StrSql & "SELECT ANAGRAFICA_CLIENTI.IdCLiente, ANAGRAFICA_CLIENTI.RagioneSocialeInvio, "
StrSql = StrSql & "ANAGRAFICA_CLIENTI.Telefono, ANAGRAFICA_CLIENTI.cellulare, ANAGRAFICA_CLIENTI.Indirizzo, ANAGRAFICA_CLIENTI.mail, "
StrSql = StrSql & "ANAGRAFICA_CLIENTI.Sospesi, ANAGRAFICA_CLIENTI.Acconti, ANAGRAFICA_CLIENTI.Filiale, "
StrSql = StrSql & "ANAGRAFICA_CLIENTI.InAttesa "
StrSql = StrSql & "FROM ANAGRAFICA_CLIENTI "
StrSql = StrSql & "WHERE [RagioneSocialeInvio] like '*" & Me.TxtRicerca & "*' "
StrSql = StrSql & "ORDER BY ANAGRAFICA_CLIENTI.RagioneSocialeInvio "
StrSql = StrSql & "WITH OWNERACCESS OPTION;"
Me.RecordSource = StrSql
Set Rst = Me.RecordsetClone
If Rst.RecordCount = 0 Then
MsgBox "Nessun record trovato", vbExclamation, "NESSUN RISULTATO"
Me.RecordSource = strSQL_TMP
Rst.MoveFirst
Me.TxtRicerca.SetFocus
 
Else
 
Me.Bookmark = Rst.Bookmark
Me.TxtRicerca.Value = Null                        
End If
Rst.Close
 
Else
 
Me.RecordSource = strSQL_TMP                    
Set Rst = Me.RecordsetClone                    
Rst.FindFirst "[RagioneSocialeInvio] like '" & Me.TxtRicerca & "*'"
If Rst.NoMatch Then                        
MsgBox "Nessun record trovato", vbExclamation, "NESSUN RISULTATO"
Me.TxtRicerca.SetFocus
 
Else
 
Me.Bookmark = Rst.Bookmark
Me.TxtRicerca.Value = Null                        
End If                    
Rst.Close                    
End If                
End If
Se risolvo vi mando il codice completo (magari a qualcuno interessa) o il db sul sitocomune
Intanto grazie mille
Fair87
