Recupeare valore predefinito con ActiveControl

di il
6 risposte

Recupeare valore predefinito con ActiveControl

Si puo recuperare il valore predefinito di un campo attraverso la proprieta ActiveControl o con una qualcosa di analogo?

ho un'istruzione molto semplice per riportare il campo al valore "standard"
If Screen.ActiveControl.value = "" Then Screen.ActiveControl.value = Screen.ActiveControl.Name
pero mi obbliga a tenere il nome del campo = al valore che voglio visualizzare, vorrei invece dirgli una cosa tipo "Screen.ActiveControl.Valore predefinito" ma non ho trovato nulla, speravo .OldValue potesse aiutarmi ma non è cosi

6 Risposte

  • Re: Recupeare valore predefinito con ActiveControl

    bean_bandit ha scritto:


    Si puo recuperare il valore predefinito di un campo attraverso la proprieta ActiveControl o con una qualcosa di analogo?
    Il "cosa vuoi fare" è chiaro. Non ho capito però "quando" e perché.
    Non tutti i controlli hanno la proprietà DefaulValue. La buona cara vecchia guida di Access 2003 ha un aspetto positivo: elenca per ogni proprietà in quali oggetti è presente:
    Avrei qualche idea ma è campata molto in aria. Prova a spiegare meglio il tutto, con qualche informazione in più, e vediamo se è possibile fare qualcosa di meglio.
  • Re: Recupeare valore predefinito con ActiveControl

    bean_bandit ha scritto:


    recuperare il valore predefinito di un campo
    Un campo "qualsiasi" o un campo "specifico"? Se è quest'ultimo perché ActiveControl?

    Philcattivocarattere ha scritto:


    Prova a spiegare meglio il tutto, con qualche informazione in più, e vediamo se è possibile fare qualcosa di meglio.
    Concordo: racconta tutto con nomi propri di maschera e soprattutto del/i controllo/i che entra/ano in gioco.
  • Re: Recupeare valore predefinito con ActiveControl

    Ciao Phil & Osvaldo,

    Ho una maschera con N campi che uso per filtrare i dati in una sottomaschera in visualizzazione foglio dati, in oguno di questi campi c'è come valore predefinito un testo:
    Cerca cliente
    Cerca modello
    ecc
    Quindi su evento click "cerca cliente" viene cancellato ed inserisco il testo desiderato, magari faccio 2/3 ricerche poi cancello il testo (o resetto i filtri) e quindi devo far riapparire il valore predefinito "cerca cliente" quando svuoto la casella.

    ho provato Screen.ActiveControl.DefaultValue e... funziona (quasi!) anche se non mi propone .DefaultValue tra le possibili scelte di ActiveControl... unico problema mi scrive "Cerca cliente" virgolette incluse....

    Edit:

    OsvaldoLaviosa ha scritto:


    Un campo "qualsiasi" o un campo "specifico"? Se è quest'ultimo perché ActiveControl?
    entrambi i casi in verita, specifico se cancello a mano cio che ho scritto nel campo, qualsiasi se uso il pulsante elimina filtri, il nome di un campo è appunto [Cerca cliente] e il valore predefinito "Cerca cliente" ma vorrei cambiare il nome del campo in (es.) Cerca_commessa ma l'operatore deve continuare a vedere "cerca cliente" quando la casella è vuota
  • Re: Recupeare valore predefinito con ActiveControl

    bean_bandit ha scritto:


    ho provato Screen.ActiveControl.DefaultValue e... funziona (quasi!) anche se non mi propone .DefaultValue tra le possibili scelte di ActiveControl
    Perché non può sapere che tipo di controllo è e, come dicevo prima, non tutti hanno la proprietà .DefaultValue, per questo l'intellisense non lo propone.

    bean_bandit ha scritto:


    ... unico problema mi scrive "Cerca cliente" virgolette incluse....
    A questo penso che si possa porre rimedio con un Mid$.
    Quello che mi chiedo è se l'uso di Screen.ActiveControl sia il sistema migliore. Siccome ActiveControl è uno solo, come vai a reimportare tutti gli altri?
    Se i controlli non sono tanti, nel momento in cui "resetti" i parametri valorizzi i singoli controlli (textbox e combobox immagino) con il .DefaultValue, elencandoli tutti.
    Se sono numerosi potresti valutare di creare un ciclo nella collection Controls della form, impostando come criterio di esecuzione del codice dentro il ciclo un valore indicato nella proprietà Tag, che dice quali resettare.
    
    For each ctl in Me!Controls
    On Error Resume Next
        If ctl.Tag = "Y" Then
             ctl.Value = ctl.DefaultValue 'eventualmente con il Mid$
        End If
    Next
    On Error ...
    Occhio al discorso gestione degli errori: l'ho fatto perché non tutti i controlli hanno la proprietà Tag (credo) quindi se non la trova prosegue passando al controllo successivo.
    A mio avviso non vale la pena ciclare tutti i controlli per poi verificare se il Tag è valorizzato a Y perché ripristinare il valore di default, credo sia più veloce riassegnare il DefaulValue a quelli specifici.
  • Re: Recupeare valore predefinito con ActiveControl

    Philcattivocarattere ha scritto:


    Perché non può sapere che tipo di controllo è e, come dicevo prima, non tutti hanno la proprietà .DefaultValue, per questo l'intellisense non lo propone.
    Scusa, non partito sparato, sono tutte combobox

    Philcattivocarattere ha scritto:


    A questo penso che si possa porre rimedio con un Mid$.
    Quello che mi chiedo è se l'uso di Screen.ActiveControl sia il sistema migliore. Siccome ActiveControl è uno solo, come vai a reimportare tutti gli altri? [...]
    Pensavo appunto di fare un ciclo su tutti i controlli perche sto cercando di trasformare il codice che ho in un codice generico che posso applicare a tutte le maschere dove devo fare dei filtri
  • Re: Recupeare valore predefinito con ActiveControl

    bean_bandit ha scritto:


    Philcattivocarattere ha scritto:


    Perché non può sapere che tipo di controllo è e, come dicevo prima, non tutti hanno la proprietà .DefaultValue, per questo l'intellisense non lo propone.
    Scusa, non partito sparato, sono tutte combobox.
    Non cambia niente, il motivo è sempre lo stesso: Screen.ActiveControl restituisce un controllo generico. L'intellisense propone solo i membri di quella classe specifica (cioè Control) dove non è presente la proprietà .DefaulValue.
    Il fatto che tu la potessi aggiungere e il codice non andasse in errore durante l'esecuzione era dovuto solo al fatto che quella proprietà era presente in quel particolare controllo (combobox).

    bean_bandit ha scritto:


    Pensavo appunto di fare un ciclo su tutti i controlli perche sto cercando di trasformare il codice che ho in un codice generico che posso applicare a tutte le maschere dove devo fare dei filtri
    Eccolo là, allora. Scegli tu il valore da inserire nella proprietà .Tag per identificare i controlli sui quali eseguire quello che c'è dentro l'If.
    Se crei una funzione/sub generica non puoi usare Me! ma ti basta passare la form come parametro.
    Non so dirti se il discorso del valore racchiuso tra doppi apici è una cosa "normale", la prendo come me l'hai venduta e la risolverei con un Mid$ che parte dalla posizione 2 e arriva a (Len(ctl.DefaulValue) - 1)
Devi accedere o registrarti per scrivere nel forum
6 risposte