Help con maschera continua

di il
28 risposte

28 Risposte - Pagina 2

  • Re: Help con maschera continua

    Ti è stato chiesto 2 volte di allegare un Demo in quanto in quello che hai esposto lascia perplessità anche tecniche, qualche cosa non quadra e non ci aiuta a capire.

    Peraltro non conoscendoti non è semplice capire la tua preparazione di conseguenza la tua capacità “critica” di analisi, ma dal momento che esponi un problema, è bene mettere in discussione anche qualche tuo possibile errore di concetto… che chiaramente non traspare dalla tua pur esuberante e completa esposizione.

  • Re: Help con maschera continua

    Scusate

    20/12/2023 - @Alex ha scritto:


    Ti è stato chiesto 2 volte di allegare un Demo in quanto in quello che hai esposto lascia perplessità anche tecniche, qualche cosa non quadra e non ci aiuta a capire.

    Peraltro non conoscendoti non è semplice capire la tua preparazione di conseguenza la tua capacità “critica” di analisi, ma dal momento che esponi un problema, è bene mettere in discussione anche qualche tuo possibile errore di concetto… che chiaramente non traspare dalla tua pur esuberante e completa esposizione.

    Scusa non capivo che cosa volesse dire “allegare un demo”. La mia preparazione in fatto di programmazione è scarsa. Vado molto a tentativi, di solito risolvo ma questo scoglio delle maschere continue mi sta mettendo in crisi perché di tutta la base dati è la cosa che mi serve di più.

    Allego la demo della maschera. Vi prego di non criticare il codice perché NON SONO UN PROGRAMMATORE quindi so già che è ridondante e disordinato ed errori di concetto ce ne sono sicuramente.

    Ci sono due tabelle che corrispondono a due maschere, sono due versioni diverse della stessa cosa.

    Scusate per il disguido e grazie per il supporto. Qui la demo: https://1drv.ms/u/s!Am22nyqErsojlMFHcOy0kY8rspq48w?e=OcEnmv

  • Re: Help con maschera continua

    Ora è chiaro, ed ovviamente scontato che in maschere continue NON sia da fare in quel modo.

    Quindi se il tuo Controllo MASTER CONDIZIONANTE è [GradingUnico] dovrai usare la Formattazione Condizionale che tuttavia NON è applicabile sulle CheckBox, quindi da trovare una soluzione differente…

    In realtà la risposta giusta sarebbe “NON SI PUO' FARE”, tuttavia non è vero, solo che la soluzione è decisamente ben più articolata e tecnica, pertanto richiede qualche conoscenza avanzata come logica non serve essere mostri. 

    Provo a spiegartelo ma consapevole potrebbe non essere alla portata.

    Serve usare delle TextBox con Tipo Carattere “Wingdings 2” che è un carattere simil grafico, che se ben usato replica nel tuo caso lil FLAG se visualizzi la “P”, con Origine Controllo una funzione calcolata che gestisce il valore del Controllo Associato che renderai NON VISIBILE.

    Quindi avrai una CheckBox [GradingUnico0] associata al campo [GradingUnico0] non visibile, ed una TextBox che chiamiamo [tGradingUnico0] con Font “Wingdings 2” ed origine Controllo così:

    =IIF([GradingUnico0];"P";"")

    Questo farà si che se la ChekBox è Flaggata la TextBox visualizzi il Flag e viceversa.

    Nella TextBox [tGradingUnico0] applicherai una Formattazione Condizionale vincolata al Controllo MASTER [GradingUnico] ed imposterai lo stato di ATTIVO condizionato dal valore del controllo detto prima.

    Ora sei a metà… perchè così non solo non puoi Cliccare le CheckBox [GradingUnico0÷5] che sono INVISIBILI, ma l'effetto delle TextBox va preservato… quindi devi posizionare sopra le 6 TextBox che Simulano le CheckBox un Pulsante(CommandButton) renderlo trasparente in modo che non si veda posizionarlo in PRIORITA' di visualizzazione o Primo Piano rispetto alle TextBox.

    Ora devi gestire il Click sul Button in modo da EMULARE le CheckBox… ma devi usare l'Evento MOUSEUP quindi sapendo la posizione delle TextBox se il MouseUp è sopra alla TextBox [tGradingUnico0] vai a fare il TOGGLE sul controllo nascosto [GradingUnico0] una cosa simile

    Sapendo le posizioni delle TextBox… (attenzione che devono essere RELATIVE al CommandButton, quindi per fare il calcolo devi prendere il Left della TextBox e sottrarre il Left del CommandButton, quindi…)

    Private Sub cmdButton_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
    	If Button = acLeftButton Then
    		Select Case x
    			Case >10 AND <300	' corriponde alla posizione relativa al Button della [tGradingUnico0] 
    				Me!GradingUnico0=Not GradingUnico0
    			Case >300 AND <600	' corriponde alla posizione relativa al Button della [tGradingUnico1] 
    				Me!GradingUnico1=Not GradingUnico1
    			Case >600 AND <900	' corriponde alla posizione relativa al Button della [tGradingUnico2] 
    				Me!GradingUnico2=Not GradingUnico2	
    			etc...
    		End Select
    	end if
    End Sub

    Se vuoi inserire il riconoscimento da codice della posizione:

    Case > (Me!GradingUnico0.Left-Me!cmdButton.Left) And <(Me!GradingUnico0.Left-Me!cmdButton.Left)+Me!GradingUnico0.Width
    etc...

    Questo farà variare le CheckBox non Visibili e conseguentemente le TextBox visibili che hanno l'origine Controllo come indicato sopra.
    Questa tecnica, non molto conosciuta, è purtroppo una delle poche cose funzionali fattibili… ;-) io la uso da molti anni con ottimi risultati.

    Ora vedi tu.

  • Re: Help con maschera continua

    20/12/2023 - @Alex ha scritto:


    Quindi se il tuo Controllo MASTER CONDIZIONANTE è [GradingUnico] dovrai usare la Formattazione Condizionale che tuttavia NON è applicabile sulle CheckBox, quindi da trovare una soluzione differente…

    In realtà la risposta giusta sarebbe “NON SI PUO' FARE”, tuttavia non è vero, solo che la soluzione è decisamente ben più articolata e tecnica, pertanto richiede qualche conoscenza avanzata come logica non serve essere mostri. 

    Provo a spiegartelo ma consapevole potrebbe non essere alla portata.

    Grazie mille Alex. Esatto, non è proprio alla portata ma vediamo che ne viene fuori.

    Ora, io avevo trovato una soluzione “mediana” con la seconda maschera (_NEW) nella quale attraverso la/e checkbox mi limito ad abilitare la/e combo e tutto sommato mi “aggradava”, come aveva scritto Osvaldo.

    In realtà in un primo momento ero riuscito a fare qualcosa di simile usando la proprietà

    recordsetclone()

    ma non so che cosa ho combinato poi e ha smesso di funzionare. Immaginavo che il recordsetclone() fosse uno snapshot del record “fuori” dalla maschera e lavorando su quello si poteva agire solo sui campi senza modificare la maschera e poi con

    .update

    rimettere tutto a posto. Ma non mi ricordo più come avevo fatto.

  • Re: Help con maschera continua

    La soluzione delle ComboBox 

    20/12/2023 - KKSergio ha scritto:


    20/12/2023 - @Alex ha scritto:


    Quindi se il tuo Controllo MASTER CONDIZIONANTE è [GradingUnico] dovrai usare la Formattazione Condizionale che tuttavia NON è applicabile sulle CheckBox, quindi da trovare una soluzione differente…

    In realtà la risposta giusta sarebbe “NON SI PUO' FARE”, tuttavia non è vero, solo che la soluzione è decisamente ben più articolata e tecnica, pertanto richiede qualche conoscenza avanzata come logica non serve essere mostri. 

    Provo a spiegartelo ma consapevole potrebbe non essere alla portata.

    Grazie mille Alex. Esatto, non è proprio alla portata ma vediamo che ne viene fuori.

    Ora, io avevo trovato una soluzione “mediana” con la seconda maschera (_NEW) nella quale attraverso la/e checkbox mi limito ad abilitare la/e combo e tutto sommato mi “aggradava”, come aveva scritto Osvaldo.

    Questa soluzione in ogni caso NON FUNZIONA con il codice, ma solo con la Formattazione Condizionale, ed onestamente penso sia la più Semplice.

    In realtà in un primo momento ero riuscito a fare qualcosa di simile usando la proprietà

    recordsetclone()

    ma non so che cosa ho combinato poi e ha smesso di funzionare. Immaginavo che il recordsetclone() fosse uno snapshot del record “fuori” dalla maschera e lavorando su quello si poteva agire solo sui campi senza modificare la maschera e poi con

    .update

    rimettere tutto a posto. Ma non mi ricordo più come avevo fatto.

    Non so cosa tu abbia provato con il RecordsetClone che non è una proprietà ma un Oggetto… tuttavia sono certo non si possa ottenere NULLA che possa assomigliare alla gestione ENABLED per il record Corrente.

  • Re: Help con maschera continua

    20/12/2023 - @Alex ha scritto:


    Non so cosa tu abbia provato con il RecordsetClone che non è una proprietà ma un Oggetto… tuttavia sono certo non si possa ottenere NULLA che possa assomigliare alla gestione ENABLED per il record Corrente.

    Ok, proverò come mi hai indicato. Conosco il Wingdings quindi non dovrei avere grossi problemi a mettere una casellina sulla form, il resto magari mi impegnerà un po' di più.

    Domanda diversa: e se invece della maschera continua usassi il foglio dati, avrei lo stesso problema?

  • Re: Help con maschera continua

    Peggio… il Foglio Dati o DataSheetView, ha anche limitazioni Visuali… 

  • Re: Help con maschera continua

    20/12/2023 - @Alex ha scritto:


    Peggio… il Foglio Dati o DataSheetView, ha anche limitazioni Visuali… 

    Allora mi semplifico la vita usando la maschera _NEW dove ho solo 4 checkbox relative al un solo campo di riferimento, anziché lavorare su tutti i grading che mi fa diventare scemo.

    Provo e ti faccio sapere. Devo chiudere il thread?

  • Re: Help con maschera continua

    20/12/2023 - @Alex ha scritto:


    Serve usare delle TextBox con Tipo Carattere “Wingdings 2” che è un carattere simil grafico, che se ben usato replica nel tuo caso lil FLAG se visualizzi la “P”, con Origine Controllo una funzione calcolata che gestisce il valore del Controllo Associato che renderai NON VISIBILE.

    Quindi avrai una CheckBox [GradingUnico0] associata al campo [GradingUnico0] non visibile, ed una TextBox che chiamiamo [tGradingUnico0] con Font “Wingdings 2” ed origine Controllo così:

    =IIF([GradingUnico0];"P";"")

    Questo farà si che se la ChekBox è Flaggata la TextBox visualizzi il Flag e viceversa.

    Nella TextBox [tGradingUnico0] applicherai una Formattazione Condizionale vincolata al Controllo MASTER [GradingUnico] ed imposterai lo stato di ATTIVO condizionato dal valore del controllo detto prima.

    Ne approfitto per ringraziare @Alex per l'ottimo suggerimento della textbox e del pulsante che mi ha permesso di migliorare una situazione leggeremente differente: in una form ho una checkbox che mostra lo stato di un documento (evaso/non evaso). Con una dlookup recupero il valore dalla tabella tramite ID del documento che vado ad inserire nella form. Per cambiarne lo stato, utilizzavo una seconda checkbox con una routine  di editing sul recordset filtrato.

    Con il suggerimento di @Alex ho eliminato entrambe le checkbox, ho inserito la sola textbox e come origine ho messo sempre la Dlookup. Poi ho inserito il pulsante trasparente modificandone il codice come segue :

    Private Sub Comando70_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
    On Error GoTo Err_Comando70_MouseUp
    
    Dim bln As Boolean
    Dim rst As DAO.Recordset
    
        Set rst = DBEngine(0)(0).OpenRecordset("SELECT * FROM tblOFoffertefornitori WHERE IDtabOFid=" & Me.frmOCcboNUMtabOCIDtabOFid)
        bln = Not rst.Fields("FLAGtabOFevaso")
        rst.Edit
        rst.Fields("FLAGtabOFevaso") = bln
        rst.Update
        rst.Close
        Set rst = Nothing
        frmOCtxtcheckboxofferte.Requery
        
    Exit_Comando70_MouseUp:
        Exit Sub
    
    Err_Comando70_MouseUp:
        MsgBox Err.Number & " " & Err.Description
        Resume Exit_Comando70_MouseUp
    End Sub

    Grazie ancora

  • Re: Help con maschera continua

    Fai attenzione che hai omesso una parte importante… vale a dire la DISCRIMINAZIONE del Pulsante premuto…, nel tuo caso anche premendo la rotellina si attiva il codice, ovviamente anche con il Right e Left_Click.

    Se invece vuoi limitare al Left o Right Click devi reintrodurre:

    If Button = acLeftButton Then	' oppure acRightButton 
    	..... tuo codice
    
    End if

    Ma se il record che MODIFICHI è quello attivo, ti basta andare a modificare il Controllo associato a [FLAGtabOFevaso]

    Private Sub Comando70_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
    	If Button = acLeftButton Then	' oppure acRightButton 
    		Me!FLAGtabOFevaso=Not Me!FLAGtabOFevaso
    	End if
    End Sub

    Saluti

  • Re: Help con maschera continua

    Grazie @Alex per l'ulteriore consiglio; ho modificato come da Te suggerito nella prima parte del post.

    Non posso modificare direttamente il controllo perche' la form e' associata ad una tabella mentre il campo checkbox  e' in un'altra tabella; recupero il valore con una Dlookup.

  • Re: Help con maschera continua

    Ho capito, come alternativa puoi valutare questo:

    Dim sSQL	As String
    sSQL="UPDATE tblOFoffertefornitori SET FLAGtabOFevaso=Not FLAGtabOFevaso WHERE IDtabOFid=" & Me.frmOCcboNUMtabOCIDtabOFid
    DbEngine(0)(0).Execute sSQL, dbFailOnerror

    Ciao

  • Re: Help con maschera continua

    Super… il dono della sintesi: niente apertura recordset, ecc. ecc.

    Grazie 1000 @Alex

  • Re: Help con maschera continua

    Ok, nel frattempo ho risolto, troppo complessa la soluzione. Lascio tutti i campi visibili, elimino le checkbox e lascio le combo, che non danno alcun fastidio :)

    Grazie a tutti, per me il thread si può chiudere.

Devi accedere o registrarti per scrivere nel forum
28 risposte