Stack maschere

di il
10 risposte

Stack maschere

Sono come al solito a chiedere lumi
C'e' un modo per gestire lo stack chiamate delle maschere?
Ovvero dalla maschera menu principale chiamo un seconda maschera, vorrei che il menu principale non fosse piu' visibile.
Dalla seconda maschera scelgo un'altra maschera da aprire, vorrei che anche la seconda maschera sparisse.
E poi magari anche dalla seconda maschera entro in una terza maschera, vorrei che anche la terza mascera sparisse.
Poi man mano che chiudo le maschera faccio il percorso a ritroso e man mano che arretro torno sempre sulla maschera che ha fatto la chiamata.
Chiudo la quarta maschera e torno sulla terza, chiudo la terza e cosi' via, fors'anche a tornare sul menu principale.
Magari e' possibile farlo con diverse strade e una sara' piu' veloce e comoda...
Per esempio se apro una maschera con Openform posso impostare la maschera come invisibile e poi aprire la chiamata?
Quando finisco il lavoro sulla seconda maschera la chiudo e quando rientro nella chiamante la rendo nuovamente visibile...
E' una soluzione? E' fattibile?
Grazie

10 Risposte

  • Re: Stack maschere

    Cerco di seguire il tuo ragionamento:

    sei in M1 e vuoi andare in M2 chiudendo M1 (se hai dei campi che in M2 prendono un valore di riferimento da M1 - ti consiglio di renderla invisibile)

    Comunque, nello stesso comando che usi per aprire M2 dai il comando di chiudere M1 (o imposti la proprietà della form a non visibile)
  • Re: Stack maschere

    Marcdreamer ha scritto:


    Comunque, nello stesso comando che usi per aprire M2 dai il comando di chiudere M1 (o imposti la proprietà della form a non visibile)
    Scusa, intendevo dire nella stessa macro in cui hai il comando per aprire M2, inserisci anche il comando per chiudere M1
  • Re: Stack maschere

    Questo sul pulsante scelto
    Private Sub pulGuideVeloce_Click()
    [Forms]![PannelloComandiPrincipale].Visible = False
    DoCmd.OpenForm ("InserimentoGuideVeloce")
    [Forms]![PannelloComandiPrincipale].Visible = True
    End Sub
    Ma non e' quello che mi aspetto, la maschera menu principale rimane in primo piano ela seconda maschera gli si apre sotto...
    Cosa sbaglio?
  • Re: Stack maschere

    La maschera principale si chiama "PannelloComandiPrincipale"?

    Se sì, perché la rendi invisible e subito dopo visibile?

    Dovresti renderla visibile nuovamente solo quando chiudi la M2
  • Re: Stack maschere

    Esattamente quello che devo fare!
    sono in PannellocomandiPrincipale e chiamo InserimentoGuideVeloce
    rendo invisibile la chiamante (PannelloComandi)
    apro le seconda (InserimentiGuideVeloce)
    quando questa viene chiusa torno a rendere visibile PannelloComandi

    Avrei bisogno di una procedura cosi' perche' posso arivare ad alcune maschere anche da parti diverse del programma
    Quindi la struttura ad albero non e' rigida
    Per questo sto cercando il modo con il quale da una maschera chiamata tornare alla chiamante
    che non e' sempre rigidamente la stessa

    Mi chiedevo se c'era un modo di fare questo lavoro senza lavorare artigianalmente con un array pubblico..
  • Re: Stack maschere

    Presumo tu abbia un pulsante chiudi sulla M2, giusto?

    quindi, sul pulsante che apre la m2, imposti la non visibilità della m1
    sul pulsante chiudi della m2, imposti la visibilità della m1

    e così fai per tutte le altre maschere che dovrai aprire.
    se metti tuttosullo stesso pulsante, access non capisce che deve aspettare di chiudere la seconda form
  • Re: Stack maschere

    Chiaramente.
    Ma il problema e' che la m2 o piu' sotto la m3 o piu' facilmente una m4 possono essere chiamate da maschere diverse e non sempre dalla stessa.
    Quindi una maschera puo' non sapere quale maschera l'ha chiamata e non sapere quale deve riaprire e dove deve ritornare quando viene chiusa.
    Una maschera chiamata dovrebbe fare quello che fa una funzione, fare il suo lavoro indipendente da dove e' stata chiamata e ritornare alla chiamante.
    Mi pare di capire che VBA non esegue il codice sequenzialmente
    Private Sub pulGuideVeloce_Click()
    [Forms]![PannelloComandiPrincipale].Visible = False
    DoCmd.OpenForm ("InserimentoGuideVeloce")
    [Forms]![PannelloComandiPrincipale].Visible = True
    End Sub
    1) rendo invisibile PannelloPrincipale (e ne sospendo l'attivita')
    2) passo alla maschera (GuideVeloce) ed eseguo tutto il lavoro e cpo chiudo con un pulsante
    3) ritono al codice sopra e rendo nuovamente vicibile PannelloPrincipale ed eventualmente proseguo il lavoro
    o mi sbaglio?
  • Re: Stack maschere

    Premetto che non condivido l'apertura di 37 Forms una dietro l'altra... è ovvio non possa essere un sistema molto pratico..., io al massimo uso 2 aperture aggiuntive... ma aprendo in modalità Popup a scelta Obbligatoria, non è possibile saltare da una all'altra, risulta ordinato e funzionale.

    Per fare uno Stack di Aperture serve una Collection in un Modulo Pubblico.
    Ad ogni apertura la maschera si AUTOINSERISCE nella Collection chiamando una funzione Public e su Unload si va ad Eliminare.
    Le collection sono indicizzate, quindi sai sempre in che punto sei.
  • Re: Stack maschere

    Grazie Alex ma non voglio complicarla troppo... carne al fuoco ne ho gia' molta.
    Chiaramente non si tratta di aprire 37 forms a cascata... non e' ne' razionale ne' elegante.
    Il mio progetto di gestione allievi in autoscuola ha bisogno di arrivare, da parti diverse, ad alcune maschere che operano sulle singole lezioni di ogni allievo, o su sessioni di esami che coinvolgono diversi allievi sempre da parti diverse... da 3 o 4 parti diverse.
    Quindi su piccole parti del progetto che pero' possono essere chiamate da maschere diverse con Openforms ed il where che serve in quel momento.
    E' quindi una esigenza limitata.
    Pensavo che una soluzione semplice potrebbe essere utilizzare il parametro openargs
    Con esso la maschera chiamata saprebbe quale delle 3 o 4 maschere l'ha chiamata in gioco e quindi cosa deve fare al momento di chiudersi.
    Cosa ne pensi?
  • Re: Stack maschere

    È una possibilità che sicuramente funziona.
Devi accedere o registrarti per scrivere nel forum
10 risposte