Return di dati da una seconda maschera

di il
6 risposte

Return di dati da una seconda maschera

Forse sono nel pallone e non mi accorgo di una soluzione che ho sotto gli occhi, ma non mi era ancora capitato e sinceramente mi sta dando filo da torcere.
Mi rivolgo a voi per questo problema:
Ho una prima maschera abbastanza ricca di controlli.
Per insufficienza di spazio quindi, ho bisogno di aprire una seconda maschera, al fianco della prima per effettuare una ricerca di un record sulla stessa tabella mediante casella di testo e BoxList.
Conclusa la ricerca, devo riportare l'ID nella prima maschera allo scopo di filtrare anche questa e visualizzare l'intero record.
Chiudo anche la seconda maschera che non serve più.
Quello che non riesco a fare è che, dopo aver scelto il record nella seconda maschera, tutto il resto avvenga in modo automatico e trasparente per l'operatore.

Posso chiedere di darmi una mano?
grazie antonio cuomo

6 Risposte

  • Re: Return di dati da una seconda maschera

    Non ho ben compreso perchè devi aprire una seconda maschera... ma non è il problema...!
    Di solito quando si deve aprire una 2° Form al fine di avere una Selezione che poi condiziona la 1° form(definita Chiamante)... serve far diventare SINCRONO il processo di gestione delle 2 maschere.
    Questo si ottiene aprendo la 2° in modalità acDialog.
    Serve quindi recuperare il valore della selezione della 2° ed applicarlo alla 1°... ma quì si deve usare uno stratagemma...

    Nella 1° Form, la Chiamante si gestisce così
    
        DoCmd.OpenForm "SecondaForm", , , , , acDialog
        Me.Testo0.Value = Forms("SecondaForm").ControlloDaUsare
        DoCmd.Close acForm, "SecondaForm"
    Nel controllo [Testo0] hai il valore della selezione della 2° Form che ora puoi usare nella 1° come meglio credi...
    Nella 2° Form invece serve intercettarte e disabilitare la chiusura...
    
    Private Sub Form_Unload(Cancel As Integer)
        Cancel = Me.Visible
        Me.Visible = False
    End Sub
  • Re: Return di dati da una seconda maschera

    C'è ancora qualcosa di arcano.
    Mi sono accorto che ora la mia sub della maschera chiamante rimane giustamente in pausa mentre attende il rientro della Dialog (chiamata).
    Il rientro però non avviene. Dopo la mia scelta nella BoxList, mi copio l'ID che mi interessa in una casella di testo in attesa di riprenderlo una volta rientrato nella maschera chiamante, ma non succede altro.
    Se chiudo forzatamente la Dialog, la Sub della chiamante va in errore per non trovare più la maschera da leggere.

    Mi sono perso qualcosa?
  • Re: Return di dati da una seconda maschera

    SI ti sei perso il cocnetto...!
    Al fine di far procedere serve che la Form divenga NON VISIBILE...!

    Quindi su DOPPIO_CLICK della Lista ti basta scrivere un
    
    Me.Visibile=False
    Quindi la Form chiamante legge il valore e la chiude.
  • Re: Return di dati da una seconda maschera

    Non so se è corretto, ho messo
    Me.Visible = False sotto il click e senza la Sub Form_UnLoad....

    Tutto è andato allegramente... fino a quando non si è trattato di fare un Setfocus.

    A me il Setfocus mi uccide.

    Il pulsante che mi richiama la seconda maschera risiede proprio nella maschera principale.
    Da questa debbo entrare nella SM_Lista e lì utilizzare la famosa casella di testo in cui mi sono salvato il mio ID di ritorno.

    Purtroppo, nonstante ogni tentativo:
    Me!SM_Lista.SetFocus oppure
    Forms!M_Impegni!SM_Lista.Setfocus oppure
    SM_Lista.Setfocus oppure
    DoCmd.GoToControl "SM_Lista"
    non riesco a scendere nella SM_Lista per accedere al mio Testo73.

    Se tento un accesso tipo
    MsgBox Forms!M_Impegni!SM_Lista!Testo73.Value
    risultato = 45 (per esempio)

    E' tutta la mattina che sono fermo; mi sai dare una dritta Alex?
    buon pranzo.
  • Re: Return di dati da una seconda maschera

    Perchè devi usare il SetFocus...?
    Prima di andare avanti a testa bassa, non pensi sia opportuno riflettere sul perchè di certe scelte...?

    Il SetFocus non serve a NULLA nel tuo caso... ho visto codice di persone che sfruttano il Focus per poi usare la proprietà TEXT dei controlli... il che mi lascia sinceramente molto stranito, è pur vero che ognuno si fa male come meglio crede ma se parliamo con cognizione di causa e non tanto per fare chiacchiera, è una cosa inutile e sbagliata.

    Così come è sbagliato che tu debba salvare l'ID in una TextBox quando hai la ListBox che dal momento in cui ha un ItemSelected, quindi viene valorizzata la proprietà ListIndex, è perfettamente leggibile senza tante complicazioni.

    A dirla tutta per finezza di tecnica, nella Programmazione ad Oggetti si predispongono delle CUSTOM Properties negli Oggetti, e questo anche nelle Form che sono delle Classi...

    Nel tuo caso se volessi essere più tecnico, potresti predisporre nella Form una Property Get/Let finalizzata proprio ad esporre Proprietà Public.
    
    Property Let Id(Value As Long)
        Me.NomeListBox.Value=Value
    End Property
    
    Property Get Id() As Long
        Id=  Me.NomeListBox.Value
    End Property
    Per leggere il valore a questo punto leggi la proprietà di Form...
    
    TuoID=Forms("Nome2°Form).Id
    Fai sempre un passo per volta, ma nella direzione giusta non a caso...
  • Re: Return di dati da una seconda maschera

    Missione conclusa.
    Ho seguito la tua tecnica, pur non avendo acquisito appieno le sue potenzialità.
    In futuro farò ricorso ad essa per aspettarmi nuovi frutti e la farò più mia.
    Il fatto purtroppo è che una persona che si avvicina per curiosità a certe conoscenze (e mi riferisco alla programmazione in Access), non può fare altro che partire col piede sbagliato e così continuerà fino a quando, subentrata la passione, non sarà costretto a fare una scelta seria. A quel punto è fregato.
    Sa già troppo anche se disordinatamente, parzialmente e pasticciosamente, ma non gli va più di tornare sui suoi passi e rifare il percorso a dribbling per raccogliere tutti i pezzi che ha lasciato per strada.
    E allora arranca, si consuma, perde tempo e si incazza, con la speranza di vedere quanto prima spuntare la cima e di immaginare un percorso più in discesa. Quasi sempre è un miraggio !
    Per ora ho dato un altro calcio ad un altro barattolo.

    Grazie Alex
    antonio cuomo
Devi accedere o registrarti per scrivere nel forum
6 risposte