Newsgroup: it.comp.appl.access
Titolo: Esecuzione pulsante da Casella combinata

Salve a tutti ho una maschera "MM_NonConformita" con una casella combinata
"Fornitore"
poi ho sottomaschera "M_NonConformita" con un pulsante "NuovoRecord"
Quello che vorrei fare è che dopo aver selezionato un "Fornitore" , deve
essere eseguito in automatico il pulsante "NuovoRecord" (che renderò
invisibile).
io ho provato come segue, nell'evento DopoAggiornamento della casella
"Fornitore" ma NON funziona, non riesco a capire l'errore dove sta
******************************************************************
Private Sub Fornitore_AfterUpdate()
'Sposta il focus sul pulsante "NuovoRecord" della
sottomasc."M_NonConformita"
Forms!MM_NonConformita!M_NonConformita!NuovoRecord.SetFocus
'Simula il premere il pulsante "NuovoRecord"
SendKeys "{ENTER}", True
End Sub
*******************************************************************
Mi date una dritta per favore o se c'è una strada alternativa?
grazie
Ciao
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 Mi date una dritta per favore o se c'è una strada alternativa?
Ciao!
Con l'aiuto delle mie facoltà di paragnosta (gran figlio di
paragnosta) ti posso dire che devi sostituire "NON funziona" con una
descrizione del comportamento e di eventuali messaggi di errore.
Poi, dopo, si potrà parlare di usare una sub richiamata dalla
Fornitore_AfterUpdate e dalla NuovoRecord_Click in alternativa alla
SendKeys.
HTH
Popi

 Popi
Invece è proprio nel senso letterale di quello che ho scritto, nel senso
che non mi da un errore, ma cmq non esegue, apparentemente, il codice che
ti ho scritto prima.
Che ne pensi?


 Mi date una dritta per favore o se c'è una strada alternativa?
fargli eseguire direttamente il codice che c'e' sotto il bottone(*)?
Cmq mi e' capitato di dover "spezzare" il setfocus, prima il setfocus 
sul form e poi sul controllo
(*)Anche se fosse complicatissimo si puo' sempre trasformarlo in 
chiamata a funzione

 o se c'è una strada alternativa?
Sì, perché SendKeys fa schifo. Invece nel codice del pulsante cambia
la parola "Private" della dichiarazione a "Public":
Public Sub NuovoRecord_Click()
Poi nel AfterUpdate della combo puoi usare:
'Simula il premere il pulsante "NuovoRecord"
Me!M_NonConformita.Form.NuovoRecord_Click
Però, anche questa versione è solo un workaround, perché
non è ottimo di chiamare il codice di un controllo particolare.
Se il tuo bottone va solo ad un nuovo record nella sottomaschera
sarebbe meglio di farlo direttamente nel AfterUpdate.
La sintassi trova nell'articolo segnalato.
-- 
Ciao
Karl
*********
Access FAQ: 
www.donkarl.com/it
 

 Public Sub NuovoRecord_Click()



Ok Karl ho risolto così e va alla grande:
*******************************************
Private Sub Fornitore_AfterUpdate()
'Sposta il focus sulla sottomaschera "M_NonConformita"
Forms!MM_NonConformita!M_NonConformita.SetFocus
'Sposta il focus sul pulsante "NuovoRecord" della sottomaschera
"M_NonConformita"
Forms!MM_NonConformita!M_NonConformita!NuovoRecord.SetFocus
'Esegue il codice del pulsante "NuovoRecord"
SendKeys "{ENTER}", True
End Sub
*******************************************
GRAZIEEEEEEEEEEEEEEEEEEEEEEEEEEEE !!!!!!!!!!!!!!!!


Alessandro Cara ha scritto:



CIAO ALESSANDRO, HO SEGUITO IL TUO CONSIGLIO DI SPEZZETTARE IL CODICE, HO
FATTO COSI E FUNZIONA BENISSIMO  GRAZIAE ANCHE A TE !!!
*******************************************
Private Sub Fornitore_AfterUpdate()
'Sposta il focus sulla sottomaschera "M_NonConformita"
Forms!MM_NonConformita!M_NonConformita.SetFocus
'Sposta il focus sul pulsante "NuovoRecord" della sottomaschera
"M_NonConformita"
Forms!MM_NonConformita!M_NonConformita!NuovoRecord.SetFocus
'Esegue il codice del pulsante "NuovoRecord"
SendKeys "{ENTER}", True
End Sub
*******************************************
-- 


Alessandro Cara ha scritto:



CIAO ALESSANDRO, HO SEGUITO IL TUO CONSIGLIO DI SPEZZETTARE IL CODICE, HO
FATTO COSI E FUNZIONA BENISSIMO  GRAZIAE ANCHE A TE !!!
*******************************************
Private Sub Fornitore_AfterUpdate()
'Sposta il focus sulla sottomaschera "M_NonConformita"
Forms!MM_NonConformita!M_NonConformita.SetFocus
'Sposta il focus sul pulsante "NuovoRecord" della sottomaschera
"M_NonConformita"
Forms!MM_NonConformita!M_NonConformita!NuovoRecord.SetFocus
'Esegue il codice del pulsante "NuovoRecord"
SendKeys "{ENTER}", True
End Sub
*******************************************
-- 


 chiamata a funzione
Non complicato, in effetti. Spezzare il codice non conviene.
Esempio :
Sia M la maschera, T il tasto e click() l' evento.
In M scrivi :
PUBLIC T_CLICK()
    ...
    ...
END SUB
(fondamentale il public)
Poi se da *ogni* punto dell' applicazione fai :
CALL M.T_CLICK  ' senza parentesi
(ovviamente la maschera che ospita la click deve
essere aperta !) otterrai l' esecuzione.
Chiaramente devi indirizzare la M, prima :
(se la chiamata la fai dall' esterno, senno' basta Me
ma e' meglio fare procedure generali, senno' se poi
le sposti da una maschera all' altra ... Argh !)
dim M as form
docmd.open "ciccio"
set M = forms("ciccio")
In generale se hai :
M1, M2, ... Mk maschere, ognuna con i controlli (di qualsiasi tipo)
C1,C2, ... Cn e ognuno di questi con le proc evento :
E1, E2, ... Em  (con k,n,m non necessariamente uguali tra loro)
(ma le E1, E2, ... Possono essere anche funzioni e/o procedure
non necessariamente associate ad eventi di un controllo)
Allora se le procedure (click o altri eventi) sono dichiarate
pubbliche all' interno di ogni maschera, ognuna di queste
le esegui con :
CALL Mx.Cy_Ez oppure CALL Mx_Ez, se la proc E non e' una
procedura evento.
Non e' possibile, pero', passargli dei parametri.
(   a meno che siano procedure NON associate ad eventi
controllo, perche' allora si, certo che li puoi passare :
call Mx.Ez(p1,p2, ...,ph)   )
Ma il problema e' facilmente risolvibile.
Infatti, se tu in ogni M dichiari, nel modulo di M, le variabili
pubbliche :
Public X1 as ... ,
Public X2 as ...
...
allora esse saranno indirizzabili come Mx.Xk.
Per cui basta che metti in Mx.Xk i valori dei parametri e
poi predisponi le M.Cy_Ez a testare quei parametri.
Il risultato e' identico a passarglierli direttamente.
Ciao.