Newsgroup: it.comp.appl.access
Titolo: Chiusura delle form...

Salve a tutti,
non sono ancora riuscito a leggere tutti i messaggi ...
per cui mi scuso in anticipo se pongo una domanda già risolta.
Il mio problema è quello di chiudere da codice le varie form aperte quando
rendo 'corrente' la form principale, il pannello comandi appunto.
Al momento ho ovviato con una serie di funzioni sul Pannello Comandi su
evento  Current:
    If miaFormIsOpen() Then DoCmd.Close acForm, "mia", acSaveYes
ovviamente con altrettante Funzioni Private per la verifica dello stato form
    miaFormIsOpen()
    InputboxFormIsOpen = (SysCmd(acSysCmdGetObjectState, acForm, "Inputbox")
And acObjStateOpen) <> False
per carità funziona...ma con 14 diverse form è lunga.
Da principiante sono portato a pensare che sia possibile fare meglio, ma io
arrivo fin qui!
Grazie da ora a tutti per l'aiuto ...
David

 wrote in message
news:fg8g8.31856$Ns4.1...@news2.tin.it...

Puoi fare una Funzione in un Modulo che chiude tutte le Form Aperte
in AUTOMATICO tranne quella che passi alla funzione:
Public Function CloseForm(f_OnlyOpen as Form) as Boolean
   Dim f As String
   Dim x As Integer
   For x = 0 To Forms.Count - 1
      f = Forms(x).Name
      If f <> f_OnlyOpen.Name Then DoCmd.Close acForm, f
      CloseForm=True
   Next
End
Ovviamente per richiamarla devi scrivere nella Form che deve
rimanere aperta così:
   CloseForm Me
Non serve atro, come non serve la Funzione IsOpen che accennavi,
perchè l'Oggetto Forms contiene solo il Riferimento delle Form
APERTE che è proprio quello che serve a te....!!!
Alessandro.
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG


omissis...

Grazie per l'aiuto Alessandro...

 >

    Ho provato il tuo suggerimento, che funziona perfettamente... devo
riconoscere che la strada è lunga.
    Tuttavia, e scusa se approfitto della tua pazienza,  dato che da una
form, per necessità di visione dei record collegati, ho la possibilità di
aprirne una collegata, access mi ha notificato un errore di run time 2456 al
ritorno e quindi attivazione del pannello comandi,( in debug segnala
riferimento non valido su questa riga F = Forms(x).Name ).
    Mentre non c'è errore se diligentemente prima chiudo manualmente la
seconda formB  aperta con il pulsante della formA, in qualunque modo si
chiuda formA.
P.S.tutte le form sono con Proprietà Modal (A scelta obbligatoria) = false
Ciao e un saluto
David

 David
Si, in effetti ho provato e si verifica questo problema, ma sinceramente
non capisco perchè, o meglio potrebbe essere che ogni volta che
viene chiusa una Form vengono modificati i loro riferimenti(INDICI)
quindi la Routine che ti ho proposto non è corretta....!!!
Questa è solo una Supposizione, ci guardo un po, poi ti so dire....!
Alessandro...!


 Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG
Per ora grazie... aspetto tue notizie!
Ciao david



prova con un for each al posto del ciclo for
oppure parti dall'ultima form con uno step -1 sul ciclo for next
Saluti.
Emanuele.

 Emanuele.
Beh, Emanuele e che differenza c'č.....!!!!
Ciao.
Alessandro.


Alessandro.
Saluti.
Emanuele.

 Emanuele.
Fantastico.....!
Che stupidaggine, non ci pensavo, hai ragionissimo.
Non aggiungo altro "REO CONFESSO".
Ciao Emanuele....!
Alex.


Alex.
beh non è detto che funzioni a volte anche l'uovo di colombo si rompe
invece di stare in piedi
Saluti.
Emanuele.

 Emanuele.
Sono senza parole... ma spero vi capiate, xchč giuro mi sono perso alla
seconda risposta, anzi a tale proposito, posso chiedervi di scrivermi il
modulo di cui accennate o indicarmi le opportune modifiche.
Ciao e grazie
David



lui ha scritto
Public Function CloseForm(f_OnlyOpen as Form) as Boolean
    Dim f As String
    Dim x As Integer
    For x = 0 To Forms.Count - 1
       f = Forms(x).Name
       If f <> f_OnlyOpen.Name Then DoCmd.Close acForm, f
       CloseForm=True
    Next
 End
io dico di provare con
Public Function CloseForm(f_OnlyOpen as Form) as Boolean
    Dim f As String
    Dim x As Integer
     Dim z as Integer		
     z=forms.count - 1
    For x = z To 0 step -1
       f = Forms(x).Name
       If f <> f_OnlyOpen.Name Then DoCmd.Close acForm, f
       CloseForm=True
    Next
 End
Saluti.
Emanuele.

 Emanuele.
Lui ha RAGIONE, funziona benissimo....!
Avevo in effetti capito l'origine del difetto
sulla mia Routine ma non avevo pensato a come
risolverla.....!
Io ho inserito anche una Gestione errori in cui ho inserito
CloseForms=False
Ciao Alessandro.


 Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG
Grazie ancora e...
se andate all'Isola d'Elba, avvisatemi e fermatevi a Piombino...
Vi devo almeno un caffč.
Saluti David