Newsgroup: it.comp.appl.access
Titolo: Come ciclare fra form / controlli dell'applicazione ?

Sto tentando di creare una routine per inserire in automatico ad ogni 
avviamento delle istruzioni sugli eventi GotFocus e LostFocus dei controlli 
textbox e combobox di tutte le form
Uso il seguente codice:
-----------------------------------------
    For Each Form_Corrente In CurrentProject.AllForms
       Debug.Print Form_Corrente.Name
       For Each controllo In Forms(Form_Corrente.Name)
           If controllo.ControlType = acTextBox Or controllo.ControlType = 
acComboBox Then
               controllo.OnGotFocus = "=Setta_Focus()"
               controllo.OnLostFocus = "=Rimuovi_Focus()"
               End If
           Next
        Next
-----------------------------------------
Che pero' non funziona in quanto alla riga  For Each ctl In 
Forms(Form_Corrente.Name)  mi restituisce un errore:
"Impossibile trovare la maschera 'frmPippo' a cui si fa riferimento in 
un'espressione macro o nel codice di Visual Basic"
La form frmPippo ovviamente esiste nel progetto corrente
La riga Debug.Print stampa correttamente il nome della form frmPippo sulla 
finestra di debug
Le mie domande sono:
- perche' mi viene restituito un errore di form inesistente anche se e' 
perfettamente presente la form incriminata?
- se in qualche controllo gia' ci fosse del codice nell'evento GotFocus, 
viene sostituito da questa procedura?
- c'e' modo di 'aggiungere' il codice a quello eventualmente gia' presente 
nell'evento desiderato?
Ciao e grazie
RobertoA

 ha scritto nel messaggio 
news:4ae296ae$1...@newsgate.x-privat.org...

Credo che l'istruzione
      For Each controllo In Forms(Form_Corrente.Name)
dovrebbe essere
      For Each controllo In Forms(Form_Corrente.Controls)
Ciao
Antonio


Con   Each controllo In Forms(Form_Corrente.Controls)  adesso restituisce 
"Propriet� o metodo non supportati dall'oggetto"
Se provo con  Each controllo In Forms(Form_Corrente.Name).Controls 
restituisce lo stesso errore di prima, in sostanza "form non trovata"
Ciao e grazie
RobertoA

 ha scritto nel messaggio 
news:4ae2...@newsgate.x-privat.org...

Hai ragione, avevo sbagliato. Comunque non sono andato oltre 
quell'istruzione che mi � sembrata errata. La for sta ad indicare "per ogni 
controllo presente..." ed i controlli sono nei controls della form. Dovrebbe 
funzionare come l'hai corretta tu... forse pu� pretendere che ci sia la 
parola form in mezzo; prova cos�:
For Each controllo In Forms(Form_Corrente.Name).form.controls


Provato
Stesso errore di mancanza form
Grazie comunque
RobertoA 

 ha scritto nel messaggio 
news:4ae2...@newsgate.x-privat.org...

Quando mi capitano errori che non riesco a capire io sono abituato a mettere 
un'istruzione Stop fra le istruzioni che precedono quella incriminata e 
verificare passo-passo (pigiando il tasto F8) come si evolve la situazione. 
Nella finestra immediata puoi anche provare altre istruzioni non incluse 
nella routine. Per esempio, dopo che hai valorizzato la Form_Corrente, nella 
finestra immediata puoi scrivere "print 
forms(form_corrente).form.controls.count" per vedere se ti d� il numero di 
controlli... etc. etc.

 nell'evento desiderato?
Per� non � chiaro se tu voglia creare questi eventi a "Runtime" su evento 
apertura di una Form, in tal caso il codice che hai postato dovrebbe essere 
corretto
(un esempi analogo sicuramente funzionante potrebbe essere : 
http://www.alessandrobaraldi.it/DettaglioFaq.asp?IdFAQ=85
)
Oppure se tu intenda creare fisicamente nel Design delle Forms del tuo .mdb 
questi eventi.
Nel secondo caso devi ricordarti di aprire le Forms, appunto, in modalit� 
Design prima di creare gli eventi (trovi nell'Help di Access vari esempi).
Ciao: Oscar


La prima
Vorrei impostare il codice nell'evento senza memorizzarlo nella form
In pratica ad ogni avviamento, il programma dovrebbe inserire negli eventi 
SetFocus e LostFocus le due righe col richiamo alle funzioni per colorare lo 
sfondo textbox e 'scolorarlo'
Ciao
RobertoA

 lo sfondo textbox e 'scolorarlo'
In tal caso il suddetto esempio dovrebbe adattarsi al caso tuo, ma si pu� 
fare in almeno un altro modo: utilizzando WithEvents.
Non credo comunque (gradite eventuali smentite) che sia possibile aggiungere 
a un evento preesistente del nuovo codice.
L'assegnazione di un nuovo evento disabilita quello eventualmente gi� 
presente.
Ciao: Oscar


Ti ringrazio del consiglio
Quello che volevo capire pero' era il motivo del non funzionamento del mio 
esempio
La form esiste, ma non viene 'vista'
Ciao
RobertoA

 se e' perfettamente presente la form incriminata?
Perchï¿œ la maschera non ï¿œ aperta.
La tua confusione viene dal fatto che usi due insiemi diversi:
L'insieme CurrentProject.AllForms che contiene tutte le maschere,
aperte e chiuse.
L'insieme "Forms" che contiene solo le maschere aperte.
Questo provoca l'errore.
-- 
HTH
Karl
*********
Access FAQ: 
www.donkarl.com/it
 

 Access FAQ: 
www.donkarl.com/it
Karl non si smentisce mai. Bravissimo !!!

 La form esiste, ma non viene 'vista'
Ma tu hai avviato quel codice su evento "Open" dalla maschera?
Ciao: Oscar 

 Questo provoca l'errore.
Eh si, e' proprio cosi
Difatti se apro la form prima di richiamarla, funziona
Ciao e grazie
RobertoA


Il codice e' sul Form_Load della prima maschera
Ma comunque la prima form per la quale viene tentato l'inserimento delle 
funzioni negli eventi non e' la form corrente
Ciao
RobertoA

 Questo provoca l'errore.
Hai ragione, ho provato allora ad usare CurrentProject.AllForms che dovrebbe 
enumerare tutte le form, sia aperte che chiuse, in questo modo:
-------------------------------------------
   For Each Form_Corrente In CurrentProject.AllForms
      Debug.Print Form_Corrente.Name
      For Each controllo In CurrentProject.AllForms(Form_Corrente.Name)
          If controllo.ControlType = acTextBox Or controllo.ControlType = 
acComboBox Then
              controllo.OnGotFocus = "=Setta_Focus()"
              controllo.OnLostFocus = "=Rimuovi_Focus()"
              End If
          Next
       Next
-------------------------------------------
Niente, mi viene restituito "Propriet� o metodo non supportati dall'oggetto"
Stessa cosa se ci metto "For Each controllo In 
CurrentProject.AllForms(Form_Corrente.Name).Controls"
Come mai per l'insieme CurrentProject.AllForms non sono presenti (visibili 
con l'intellisense) per stesse proprieta' dell'insieme Forms ?
Ciao e grazie
RobertoA

 Forms ?
AllForms ha solo poche proprietï¿œ e per queste c'ï¿œ l'intellisense.
Non puoi usare Controls con AllForms. Bisogna usare Forms.
E certo una maschera chiusa resta chiusa sia con l'uno che l'altro. ;-)
Vuol dire che devi sempre aprire la maschera prima che puoi
usare il suo insieme Controls e solo con la sintassi e gerarchia
Forms("NomeMaschera").Controls


 Forms("NomeMaschera").Controls
Ho la vaga impressione che voglia modificare *definitivamente* le 
proprieta' onGotFocus e Lostfocus per tutte le forms.
--
ac

 proprieta' onGotFocus e Lostfocus per tutte le forms.
No, solo temporaneamente
Ciao e grazie
RobertoA