Funzione per la formattazione di un campo

di il
17 risposte

Funzione per la formattazione di un campo

Buonasera, ho creato la seguente funzione per per formattare dei campi di una maschera:
Public Function format_campo(ctrl As Access.control) As Boolean
With ctrl
If Len(.Value & vbNullString) = 0 Then
    Select Case format_campo
        Case format_campo = False
                        .SpecialEffect = 0
                        .BorderWidth = 1
                        .BorderColor = rosso
                        .Value = "!"
                        .TextAlign = 1
                        .ForeColor = rosso
        Case format_campo = True
                        .SpecialEffect = 2
                        .BorderWidth = 1
                        .BorderColor = g_chiaro
                        .Value = vbNullString
                        .TextAlign = 1
                        .ForeColor = vbBlack
    End Select
End If
End With
Set ctrl = Nothing
End Function
la funzione la utilizzo poi nel seguente modo:
If Len(Me.txtente_rich & vbNullString) = 0 Then format_campo (Me.txtente_rich) = False
mi restituisce un errore "La chiamata di funzione a sinistra dell'assegnazione deve restituire Variant o Object.

Dove sbaglio?

17 Risposte

  • Re: Funzione per la formattazione di un campo

    Sbagli la funzione
    Non ti è chiaro quali sono i parametri di ingresso della funzione (ctrl -> Access.control) e i parametri di uscita (format_campo di tipo boolean) oltremodo fai una assegnazione (set ctrl = nothing) che è totalmente assurda

    Qualsiasi tentativo di correzione di quanto da te scritto porterebbe alla riscrittura completa del tutto in quanto non c'è alcun fondamento logico nel tuo codice ...
  • Re: Funzione per la formattazione di un campo

    Alla fine ho modificato così:
    Public Function format_campo(ctrl As Access.control)
    With ctrl
            If Len(.Value & vbNullString) = 0 Then
                .SpecialEffect = 0
                .BorderWidth = 1
                .BorderColor = rosso
                .Value = "!"
                .TextAlign = 1
                .ForeColor = rosso
            Else
                .SpecialEffect = 2
                .BorderWidth = 1
                .BorderColor = g_chiaro 
                .TextAlign = 1
                .ForeColor = vbBlack
            End If
    End With
    End Function
    e ho utilizzato la funzione in un evento keyUp come di seguito:
    Private Sub txtente_rich_KeyUp(KeyCode As Integer, Shift As Integer)
    format_campo Me.txtente_rich
    end sub
    ma non si comporta come speravo.
  • Re: Funzione per la formattazione di un campo

    Adesso la funzione appare scritta con cognizione di causa, il richiamo della stessa nell'evento KeyUp probabilmente non è la scelta migliore.
    Qual'è il tuo obbiettivo (sembra che tu voglia far cambiare l'aspetto del controllo quando è vuoto rispetto a quando contiene qualcosa)?
    Quando deve intervenire questo cambio di aspetto ?
  • Re: Funzione per la formattazione di un campo

    Si tratta di campi obbligatori. Quando il campo è vuoto deve apparire con bordo rosso e la presenza del carattere ! in rosso e quando il campo è compilato il bordo nero e assenza del carattere ! in rosso. Ovviamente quando l'operatore cancella tutto deve riapparire il carattere ! in rosso e il bordo del controllo in rosso.
    Quale evento sarebbe più opportuno utilizzare per fare questo?
  • Re: Funzione per la formattazione di un campo

    Solitamente quando servono questi effetti speciali... servirebbe usare la programmazione ad oggetti... in particolare servirebbe creare una classe che gestisca appunto tutte le opzioni del controllo assegnato alla classe.
    In questo modo basta scrivere 1 codice solo ed istanziare tante classi quanti sono i controlli da gedtire.
    Purtroppo questa tecnica che è normale in altri linguaggi è pressoché sconosciuta agli utenti di Office.

    A prescindere quindi dovrai scrivere codice per ogni controllo... e gestire vari eventi... Enter/Exit del controllo ma anche current di form in caso di newrecord... altrimenti non funziona bene.
  • Re: Funzione per la formattazione di un campo

    Pienamente d'accordo. Infatti opero in questo modo non sapendo lavorare con le classi, che dovrò affrontare prossimamente.
    Quello che non capisco è il comportamento della funzione nell'evento keyup. Forse la risposta è che l'unica maniera di risolvere è quella di ricorrere alle classi?
  • Re: Funzione per la formattazione di un campo

    No è che devi leggere la proprietà Text e non Value.
  • Re: Funzione per la formattazione di un campo

    I controlli sono textbox e una combobox. Se invoco la proprietà .text anzichè .value:
    Private Sub txtente_rich_KeyUp(KeyCode As Integer, Shift As Integer)
    format_campo Me.txtente_rich.Text
    end sub
    mi restituisce errore "tipo non corrispondente" in evento keyup.
  • Re: Funzione per la formattazione di un campo

    Nella funzione... non quando la chiami che ovviamente vuole un oggetto Control.
  • Re: Funzione per la formattazione di un campo

    Si ma se uso la proprietà .text anzichè .value nella funzione non ha lo stato attivo. Come risolvo?
  • Re: Funzione per la formattazione di un campo

    Ok. Ho risolto ricorrendo al metodo setfocus per rendere attivo lo stato del controllo:
    Public Function format_campo(ctrl As Access.control)
    With ctrl
    ctrl.Setfocus
            If Len(.Value & vbNullString) = 0 Then
                .SpecialEffect = 0
                .BorderWidth = 1
                .BorderColor = rosso
                .Value = "!"
                .TextAlign = 1
                .ForeColor = rosso
            Else
                .SpecialEffect = 2
                .BorderWidth = 1
                .BorderColor = g_chiaro 
                .TextAlign = 1
                .ForeColor = vbBlack
            End If
    End With
    End Function
    Ora và bene. Grazie.
  • Re: Funzione per la formattazione di un campo

    Scusa ma come fa a non avere lo stato attivo...?
    Su che evento lo chiami...?
  • Re: Funzione per la formattazione di un campo

    Evento keyUp. Questo è per uno dei controlli:
    Private Sub txtente_rich_KeyUp(KeyCode As Integer, Shift As Integer)
    format_campo Me.txtente_rich
    end sub
  • Re: Funzione per la formattazione di un campo

    A maggior ragione non può non avere il focus... c'è qualche altra cosa strana...
Devi accedere o registrarti per scrivere nel forum
17 risposte