Abilit/disabil pulsante nei singoli record in una maschera continua

di il
5 risposte

Abilit/disabil pulsante nei singoli record in una maschera continua

Buongiorno,

semplifico al massimo con un esempio semi-inventato.

Ho una tabella “Agenda” con due campi: “Nome” e “InAgenda” (Dove il campo "InAgenda è di tipo Si/No e stabilisce se quel nome è inserito in agenda oppure no)

Questa tabella è utilizzata da una maschera continua dove su ogni record si vede il campo “nome” e un pulsante accanto “PulsInserisciInAgenda”. (quindi si vedrà una cascata di “Nome” ognuno con il suo pulsante accanto).

Vorrei che questo pulsante fosse abilitato o disabilitato in base al campo “InAgenda”

- Campo “InAgenda” = No       il pulsante è abilitato, in modo che premendolo si possa inserire il nome in agenda.

- Campo “InAgenda” = Si         il pulsante è disabilitato, in modo che l'utente possa subito capire che quel nome è gia inserito in agenda.

Utilizzando il seguente codice nell'evento “su Apertura” della maschera, si abilitano e disabilitano tutti i pulsanti di tutti i record pur esserci una condizione davanti

Select Case [In agenda]
Case "Si"
Me.PulsInserisciInAgenda.Enabled = False
Case "No"
Me.PulsInserisciInAgenda.Enabled = True
End Select

Sorvolando su tutto il contorno di comandi e impostazioni…  Come devo fare per risolvere il problema dei pulsanti?

grazie…

5 Risposte

  • Re: Abilit/disabil pulsante nei singoli record in una maschera continua

    Devi usare l'evento current e probabilmente basta q riga sola di cosice.

    Private Sub Form_Current()
        Me.PulsInserisciInAgenda.Enabled = ([In agenda]="SI")
    End sub
  • Re: Abilit/disabil pulsante nei singoli record in una maschera continua

    Ho provato ed  ho sfruttato l'idea per fare anche altre prove, ma non sono riuscito ad ottenere quello che volevo… è possibile avere una spiegazione più approfondita?

    per quel poco che ne so, il “me.”  è come dire “me maschera in uso" e quindi la modifica “.enabled” avviene in tutta la maschera… questo mi fa pensare che possa esistere un altro comando che indica parti di maschera, come ad esempio ogni riga (singolo record).

  • Re: Abilit/disabil pulsante nei singoli record in una maschera continua

    Se quello che volevi è ENABLED/DISABLED quanto suggerito Funziona… tuttavia…

    Quando ti trovi in Maschera continua, devi considerare la maschera come SINGOLA ma solo sul Record corrente, gli altri sono fittizi e diventano SLAVE.

    In sostanza se disabiliti quel controllo su Evento Current, tutti i controlli verranno disattivati, ma, quando ti sposti di Record, il controllo verrà gestito in base alle condizioni del Record corrente, e gli altri visualizzati seguiranno.

    In questo caso quindi è molto più funzionale usare la Formazione condizionale che, su condizinoe specifica consente di gestire ENABLED anche se solo sui controlli TextBox/Combo.

    Quindi se nel tuo caso hai da gestire una TextBox io mi orienterei sulla Formattazione, se hai un CommandButton non puoi e devi fare come suggerito.

    [Me] è un riferimento alla classe oggetto in cui il codice viene scritto, se scrivi codice in un Modulo di una Form, il [Me] punta alla Classe Form, se il [Me] è inserito in un Modulo di Classe standard si riferisce all'Istanza della Classe.

    Il Me può essere usato SOLO all'interno di Oggetti, quindi Form/Moduli di Classe.

    Essendo l'Oggetto un Contenitore, puoi accedere ovviamente agli oggetti entrocontenuti, che sono raggruppati nella Collection Controls in questo caso.

    La sintassi corretta pertanto per accedere al Controllo dentro [Me] la Form, sarebbe così:

    Me!NomeControllo.NomeProprietà '(Value ad esempio)

    Ma è corretto anche questo:

    Me.Controls("NomeControllo").NomeProprietà '(Value ad esempio)

    si usa anche il punto in modo diretto ma sintatticamente non è proprio corretto, quindi puoi anche scrivere:

    Me.NomeControllo.NomeProprietà '(Value ad esempio)

    Ora il problema che puoi avere eventualmente è se il tuo controllo ha il FOCUS, inq uel caso non è possibile renderlo DISABLED, senza spostare il focus su un'altro controllo…

    Me!AltroControllo.SetFocus
    Me!NomeControllo.NomeProprietà '(Value ad esempio)

    Saluti

  • Re: Abilit/disabil pulsante nei singoli record in una maschera continua

    11/02/2023 - Lucaaa ha scritto:


    Buongiorno,

    - Campo “InAgenda” = No       il pulsante è abilitato, in modo che premendolo si possa inserire il nome in agenda.

    - Campo “InAgenda” = Si         il pulsante è disabilitato, in modo che l'utente possa subito capire che quel nome è gia inserito in agenda.

    Sorvolando su tutto il contorno di comandi e impostazioni…  Come devo fare per risolvere il problema dei pulsanti?

    grazie…

    Salve,

    Premetto che io ho una sorta di intolleranza verso i pulsanti in una maschera continua, perciò la questione l'ho sempre risolta così:

    Al posto pel pulsante inserisco una Casella di testo e nell'origine controllo inserisco questo:

    =iif(inAgenda=true;"";"Ins in Agenda")

    In questo modo nella textBox vedrai  il testo “Ins in Agenda”  e nulla quando il soggetto è già in agenda.

    Il codice da inserire al clik della textBox  sarà il seguente:

    If InAgenda=true then
        exit sub
    else
    il tuo codice
    end if

    Saluti

  • Re: Abilit/disabil pulsante nei singoli record in una maschera continua

    Nelle Form continue, io uso TextBox e CommandButton sovrapposti, il Commandbutton trasparente e la textbox la gestisco con la F.C.

    Il commandbutton volendo può essere solo 1 se hai più pulsanti in fila… basta leggere X/Y dell'evento Down/Up e gestire di conseguenza.

Devi accedere o registrarti per scrivere nel forum
5 risposte