"Mask Default view" controllabile con un controllo a pulsante

di il
10 risposte

"Mask Default view" controllabile con un controllo a pulsante

Buongiorno,

ho un'idea che non so se realizzabile. Mi basterebbe avere un feedback indicativo poi ci lavorerei da solo ...

All'interno di una maschera ho una sottomaschera collegata con default view impostato come “datasheet”.

Talvolta avrei bisogno che la stessa sottomaschera fosse visualizzata in view “Continuous form”.

Senza dover entrare in visualizzazione struttura.

E' possibile aggiungere un pulsante alla maschera padre che abbia un codice che mi cambi la visualizzazione della sottomaschera?

Metterei anche due pulsanti per semplificare il codice..

Ringrazio in anticipo per ogni risposta.

Francesco

10 Risposte

  • Re: "Mask Default view" controllabile con un controllo a pulsante

    Innanzitutto la proprietà DefaultView viene letta solo all'apertura della Form, quindi cambiarla devi passare per il DesignTime, modificarla, salvare e riaprire…!

    Per switchare la visualizzazione puoi solo usare il comando:

    DoCmd.RunCommand acCmdSubformDatasheetView '(oppure acCmdSubformFormView)

    Per capire in che visualizzazione è la SubForm puoi leggere la proprietà CurrentView e mettere un Select Case.

    Attenzione che RunCommand agisce sull'Oggetto attivo, quindi prima di eseguirlo devi spostare il focus sul Container della SubForm.

    Me.NomeContainerSubForm.SetFocus
    DoCmd.RunCommand acCmdSubformDatasheetView '(oppure acCmdSubformFormView)
  • Re: "Mask Default view" controllabile con un controllo a pulsante

    @Alex arriva sempre prima di tutti.

    Stavo testando il seguente codice associato ad un pulsante che fa lo switch fra visualizzazione foglio dati e visualizzazione maschera singola. Trovato qui:

    https://stackoverflow.com/questions/38382638/how-can-i-change-a-microsoft-access-form-view-from-single-form-to-continous-form

     ATTENZIONE che, perche' funzioni, devi abilitare le visualizzazioni nella proprieta' della subform:

    vedi questo:

    https://www.access-programmers.co.uk/forums/threads/accmdsubformdatasheetview-command-not-available.168037/

    Private Sub Comando97_Click()
    On Error GoTo Err_Comando97_Click
    
        If Me.TuaSubform.Form.CurrentView = 1 Then
            Me.TuaSubform.SetFocus
            DoCmd.RunCommand acCmdSubformDatasheetView
            Exit Sub
        End If
    
        If Me.TuaSubform.Form.CurrentView = 2 Then
            Me.TuaSubform.SetFocus
            DoCmd.RunCommand acCmdSubformFormView
            Exit Sub
        End If
    
    Exit_Comando97_Click:
        Exit Sub
    
    Err_Comando97_Click:
        MsgBox Err.Description
        Resume Exit_Comando97_Click
        
    End Sub
    
  • Re: "Mask Default view" controllabile con un controllo a pulsante

    Ad @Alex e Mailman

    un grande grazie per l'aiuto. Mi metto al lavoro per testarla facendo attenzione…

    Francesco

  • Re: "Mask Default view" controllabile con un controllo a pulsante

    08/10/2024 - Mailman ha scritto:


    @Alex arriva sempre prima di tutti.

     …..

    Sono vecchiotto… ma ho i riflessi pronti ;-)

  • Re: "Mask Default view" controllabile con un controllo a pulsante

    08/10/2024 - fcaliandro ha scritto:


    un grande grazie per l'aiuto. Mi metto al lavoro per testarla facendo attenzione…

    Un'altra soluzione, in alternativa a quella indicata sopra, potrebbe essere quella di realizzare due subforms: una in modalita' FormView ed una in formato DataSheetView: le sovrapponi poi con un pulsante rendi visibile in alternativa una o l'altra.

    Qualcosa del tipo:

    If Me.TuaSubformFormView.Form.Visible Then
            Me.TuaSubformFormView.form.Visible=False
            Me.TuaSubformDesignView.form.Visible=True
    Else
        Me.TuaSubformFormView.form.Visible=true
        Me.TuaSubformDesignView.form.Visible=False
    End If
  • Re: "Mask Default view" controllabile con un controllo a pulsante

    09/10/2024 - Mailman ha scritto:

    Un'altra soluzione, in alternativa a quella indicata sopra, potrebbe essere quella di realizzare due subforms: una in modalita' FormView ed una in formato DataSheetView: le sovrapponi poi con un pulsante rendi visibile in alternativa una o l'altra.

    Qualcosa del tipo:

    If Me.TuaSubformFormView.Form.Visible Then
            Me.TuaSubformFormView.form.Visible=False
            Me.TuaSubformDesignView.form.Visible=True
    Else
        Me.TuaSubformFormView.form.Visible=true
        Me.TuaSubformDesignView.form.Visible=False
    End If

    Questa soluzione non è buona, hai 2 SubForm ed anche se NON VISIBILE raddoppi il traffico dati, entrambe sono SINCRONIZZATE Campi Master/Secondari

    Oltretutto quando modifichi i dati in una devi ricordare di fare il Requery dell'altra… direi da evitare.

    Piuttosto, se questa può essere una alternativa, si cambia il SourceObject, così:

    Select Case Mode
    	Case VisualizzaFormNormale
    		Me!ControlloSM.SourceObject = "TuaSubformFormView"
    	
    	Case VisualizzaDataSheet
    		Me!ControlloSM.SourceObject = "TuaSubformDesignView"
    End Select

    Non serve modificare LinkMasterFields/LinkChildFields in quanto ovviamente non cambiano.

  • Re: "Mask Default view" controllabile con un controllo a pulsante

    09/10/2024 - @Alex ha scritto:

    Piuttosto, se questa può essere una alternativa, si cambia il SourceObject, così:

    Ok, c'è scritto “se può essere”, quindi va valutata, ma in questo modo non si devono avere due maschere identiche, una con modalità di visualizzazione predefinita “maschera singola” e un'altra con visualizzazione predefinita “Struttura” (design)? Dovesse accadere che si modifica una bisogna ricordarsi di modificare anche l'altra. Ho capito giusto? Oppure si tratta di creare due istanze della stessa maschera, modificando la proprietà di visualizzazione di una delle due? (mai fatto ma imparare non è vietato).

    Chiedo per un amico che è interessato alle sottomaschere.

  • Re: "Mask Default view" controllabile con un controllo a pulsante

    08/10/2024 - Mailman ha scritto:


    …..

    Private Sub Comando97_Click()
    On Error GoTo Err_Comando97_Click
    
        If Me.TuaSubform.Form.CurrentView = 1 Then
            Me.TuaSubform.SetFocus
            DoCmd.RunCommand acCmdSubformDatasheetView
            Exit Sub
        End If
    
        If Me.TuaSubform.Form.CurrentView = 2 Then
            Me.TuaSubform.SetFocus
            DoCmd.RunCommand acCmdSubformFormView
            Exit Sub
        End If
    
    Exit_Comando97_Click:
        Exit Sub
    
    Err_Comando97_Click:
        MsgBox Err.Description
        Resume Exit_Comando97_Click
        
    End Sub
    

    @Mailman

    Mailman ho utilizzato il codice di sopra e funziona molto bene. il cambio di visualizzazione è immediato senza ritardo. Ho potuto scegliere se passare dal data sheet al single form piuttosto che il continuous form.

    Devo un grosso grazie a tutti per aver imparato questo passaggio.

    Ciao

  • Re: "Mask Default view" controllabile con un controllo a pulsante

    09/10/2024 - Philcattivocarattere ha scritto:


    09/10/2024 - @Alex ha scritto:

    Piuttosto, se questa può essere una alternativa, si cambia il SourceObject, così:

    Ok, c'è scritto “se può essere”, quindi va valutata, ma in questo modo non si devono avere due maschere identiche, una con modalità di visualizzazione predefinita “maschera singola” e un'altra con visualizzazione predefinita “Struttura” (design)? Dovesse accadere che si modifica una bisogna ricordarsi di modificare anche l'altra. Ho capito giusto? Oppure si tratta di creare due istanze della stessa maschera, modificando la proprietà di visualizzazione di una delle due? (mai fatto ma imparare non è vietato).

    Chiedo per un amico che è interessato alle sottomaschere.

    In realtà non è una soluzione oscena… nel caso di SINGOLA esigenza, se questo giochino è da fare su 20 SubForm, direi di evitarlo…!
    Si tratta di avere 2 Oggetti Form indipendenti, ognuno con una sua Grafica o ViewType, e la medesima Origine dati, usati come SubForm, quindi all'oggetto SubForm Container basta dire a quale Form puntare e Runtime switcha tra i 2 Oggetti Form.

  • Re: "Mask Default view" controllabile con un controllo a pulsante

    09/10/2024 - @Alex ha scritto:

    nel caso di SINGOLA esigenza… Si tratta di avere 2 Oggetti Form indipendenti, …

    Perfetto, avevo capito giusto fin da subito.

Devi accedere o registrarti per scrivere nel forum
10 risposte