[Access] Disabilitare con una funzione i pulsanti in una sottomaschera

Anonimo
2010-02-04T11:13:11+00:00

Per preservare i dati in una maschera ho scritto questa funzione che usa il classico metodo del ciclare tra i

controlli per cambiarne le proprietà, nello specifico vengono bloccati (Locked) i campi o disabilitati 

(Enabled) alcuni pulsanti quando viene trovata nel loro Tag la dicitura rispettivamente "lock" o "disable". Tutto funziona correttamente nella maschera principale, dove richiamo questa funzione con un pulsante.

Il problema è che ho la necessità di disabilitare alcuni pulsanti in una sottomaschera. Per i campi non ci sono problemi in quanto ho il Tag "lock" nel controllo che la contiene, ma questo funzione non mi intercetta con il Tag "disable" i pulsanti contenuti nella sottomaschera e non riesco a trovare il modo di individuarli dalla funzione.

Come posso fare?

Public Function DisabilitaMask(mask, prompt As Boolean)

Dim risposta, valore As Boolean

Dim ctl As Object

If prompt = True Then

    risposta = MsgBox("Vuoi uscire dalla modalità modifica dati?", vbExclamation + vbYesNo, "Modifica")

    Select Case risposta

        Case vbNo

        Exit Function

        Case vbYes

    End Select

End If

For Each ctl In Forms(mask).Controls

    If ctl.Tag = "lock" Then ctl.Locked = True

Next ctl

For Each ctl In Forms(mask).Controls

    If ctl.Tag = "disable" Then ctl.Enabled = True

Next ctl

End Function

Massimo.

PS: non posso diabilitare il controllo sottomaschera ma solo bloccarlo, per permettere le ricerche ed il copia/incolla dei dati.

Microsoft 365 e Office | Access | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2010-02-04T12:28:23+00:00

Ciao,

Cambia la dichiarazione della function così:


Public Function DisabilitaMask(ByRef mask AS Form, ByVal prompt As Boolean)


e queste righe così


 For Each ctl In mask.Controls

      If ctl.Tag = "lock" Then ctl.Locked = True

Next ctl

 For Each ctl In mask.Controls

    If ctl.Tag = "disable" Then ctl.Enabled = True

 Next ctl


Poi dal tuo pulsante richiamerai la function sia per la maschera principale sia per la sottomaschera


DisabilitaMask Me,True

DisabilitaMask Me.NomeSottomaschera.Form,False


Ciao

Giorgio Rancati

La risposta è stata utile?

0 commenti Nessun commento

5 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2010-02-05T12:40:18+00:00

    Ciao Massimo,

    quando richiami la funzione con: DisabilitaMask Me.NomeSottomaschera.Form,False

    l'ambito è quello della sottomaschera quindi non trova l'etichetta lblModifiche.

    per risolvere puoi fare:

    If mask.Name = "MascheraPrincipale" Then

       mask.lblModifiche.Caption = "MODIFICHE ON"

    End If

    Cambia MascheraPrincipale con il nome effettivo della maschera principale.

    Ciao

    Giorgio Rancati

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2010-02-05T12:28:05+00:00

    Ciao Giorgio,

    ho controllato e tutti gli oggetti/nomi corrispondono. Mi pare però che vada in conflitto qualcosa perchè se nella function scrivo:

    Forms.MascheraPrincipale.lblModifiche.Caption = "MODIFICHE ON"

    la cosa funziona. Non è che lui la va a cercare nella sottomaschera? Nel caso posso usare due variabili distinte?

    Massimo.

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2010-02-05T10:23:37+00:00

    Ciao

    l'istruzione mask.lblModifiche.Caption = "MODIFICHE ON" è corretta, potrebbe darti errore se lblModifiche non esiste nella maschera o non è un'etichetta.

    Forse lblModifiche esiste solo nella maschera principale e tu esegui la stessa istruzione anche quando passi la sottomaschera alla funzione.

    Un altro modo per scrivere la stessa istruzione è:


    mask.Controls("lblModifiche").Caption = "MODIFICHE ON"


    Ciao

    Giorgio Rancati

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2010-02-04T17:47:52+00:00

    Perfetto la nuova function "funziona", unica cosa prima intercettavo le proprietà con righe simili:

    Forms(mask).lblModifiche.Caption = "MODIFICHE ON"

    adesso non funzionano più. Quale è la sintassi in questo caso?

    mask.lblModifiche.Caption = "MODIFICHE ON"

    mi da errore.

    Massimo.

    La risposta è stata utile?

    0 commenti Nessun commento