Condividi tramite

Colore di Sfondo Campo selezionato

Anonimo
2018-04-16T11:58:06+00:00

Buongiorno a tutti

ho realizzato un programma contenente una serie di maschere ognuna con diversi campi (textbox e combobox);

Vorrei che il campo cambiasse colore di fondo nel momento in cui venga selezionato per tornare al colore precedente una volta aggiornato.

se fosse possibile è preferibile una routine che interessasse l'intera maschera piuttosto che dover applicare ad ogni campo.

Ringrazio tutti per l'aiuto

Mirax

Microsoft 365 e Office | Accesso | 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

  1. Anonimo
    2018-04-17T10:53:59+00:00

    ciao Mirax55,

    [...]

    Tutte le maschere del mio programma hanno già il "Form_Load" per altre caratteristiche di programma, posso inserire le tue righe di codice all'interno del mio Form_Load?

    [...]

    beh, direi proprio di si....fai qualche test in autonomia, provare, provare, provare, provare....per imparare...!

    Ciao, Sandro.

    La risposta è stata utile?

    1 persona ha trovato utile questa risposta.
    0 commenti Nessun commento

7 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2018-04-17T08:32:23+00:00

    Ciao Sandro

    grazie per l'interessamento, sembra veramente una bomba il tuo suggerimento, sicuramente lo proverò ma, devo chiederti alcune cose prima:

    Tutte le maschere del mio programma hanno già il "Form_Load" per altre caratteristiche di programma, posso inserire le tue righe di codice all'interno del mio Form_Load?

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2018-04-17T08:27:25+00:00

    Ciao Carlo

    grazie per la risposta, metterò in pratica, appena possibile, il tuo suggerimento e ti farò sapere.

    Grazie ancora per la diponibilità

    Mirax

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2018-04-16T20:36:19+00:00

    ciao Mirax55,

    secondo me, la soluzione migliore, se i controlli sono tanti, e se si vuole che il cambio colore possa essere flessibile e trasversale su tutte le forms del db, è bene appoggiarsi ad una o meglio due classi che gestiscano il cambio colore in base all'oggetto in cui si trova il focus.

    Il tutto caricando i controlli in una collections ereditando proprietà ed eventi, per questi ultimi l'evento onGotFocus e onLostFocus.

    Il codice della form resta quasi nullo e si demanda alle classi il lavoro del cambio colore.

    Certo, forse un po' complicata, ma per certo efficiente.

    Prova come segue:

    su caricamento della form in cui desideri il cambio colore, istanzi la classe  clsControls e su scaricamento la distruggi  :

    Option Compare Database

    Option Explicit

    Private clsStart As clsControls

    Private Sub Form_Load()

    Set clsStart = New clsControls

    clsStart.kickoff frm:=Me

    End Sub

    Private Sub Form_Unload(Cancel As Integer)

    Set clsStart = Nothing

    End Sub

    crea un modulo di classe chiamandolo clsControls, mi raccomando al nome scrivilo esattamente come indicato e copi/incolli il codice che segue :

    Option Compare Database

    Option Explicit

    Private objCtl As clsControl

    Private col    As VBA.Collection

    Public Sub kickoff(ByVal frm As Access.Form)

    Dim iCtl    As clsControl

    Dim ctl     As Access.Control

    For Each ctl In frm.Controls

    If TypeName(ctl) = "textBox" Or TypeName(ctl) = "combobox" Then

    Set iCtl = New clsControl

    iCtl.populate ctl

    col.Add iCtl, ctl.Name

    End If

    Next

    Set iCtl = Nothing

    Set ctl = Nothing

    End Sub

    Private Sub Class_Initialize()

    Set col = New VBA.Collection

    End Sub

    Private Sub Class_Terminate()

    Set col = New VBA.Collection

    End Sub

    crei una nuova classe e la chiami clsControl, come prima occhio al nome salva la classe come indicato  e copia incolla il codice che segue : 

    Option Compare Database

    Option Explicit

    Private WithEvents mytxt       As Access.TextBox

    Private WithEvents myCbo       As Access.ComboBox

    Private Const defaultBackcolor As Long = 16777215

    Public Sub populate(ByVal ctl As Access.Control)

    Select Case TypeName(ctl)

    Case "ComboBox"

    Set myCbo = ctl

    myCbo.OnGotFocus = "[Event Procedure]"

    myCbo.OnLostFocus = "[Event Procedure]"

    Case "textBox"

    Set mytxt = ctl

    mytxt.OnGotFocus = "[Event Procedure]"

    mytxt.OnLostFocus = "[Event Procedure]"

    End Select

    End Sub

    Private Sub Class_Terminate()

    Set myCbo = Nothing

    Set mytxt = Nothing

    End Sub

    Private Sub myCbo_GotFocus()

    myCbo.BackColor = vbYellow

    End Sub

    Private Sub myCbo_LostFocus()

    myCbo.BackColor = defaultBackcolor

    End Sub

    Private Sub mytxt_GotFocus()

    mytxt.BackColor = vbGreen

    End Sub

    Private Sub mytxt_LostFocus()

    mytxt.BackColor = defaultBackcolor

    End Sub

    Ancora, i due moduli devono essere moduli di classe.

    Ora al cambio del focus, evidenzierai la textbox con il colore verde e la combo con il colore giallo, ovviamente se non ti piacciono cambia pure i colori con quelli che più ti piacciono.

    Come dicevo, per applicare lo stesso comportamenti circa i colori basti che istanzi la classe clsControls nelle varie forms della tua applicazione.

    Facci sapere.

    ciao, Sandro.

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2018-04-16T14:49:23+00:00

    La procedura è la seguente

    Private Sub ImpostaColori(objForm As Form, booAttivazione As Boolean, Optional strNomeControllo As String)

    ' permette di variare il colore dello sfondo e del carattere del controllo attivo

    If booAttivazione Then

    objForm.ActiveControl.BackColor = 6723891     'sfondo Verde

    objForm.ActiveControl.ForeColor = 65535     'carattere Giallo

    Else

    objForm.ActiveControl.BackColor = 16777215  'sfondo Bianco

    objForm.ActiveControl.ForeColor = 0         'carattere nero

    End If

    End Sub

    che deve essere richiamata nel seguente modo:

    Private Sub nomeControllo_GotFocus()

    ImpostaColori Me, True

    End Sub

    Private Sub nomeControllo_LostFocus()

    ImpostaColori Me, False

    End Sub

    La risposta è stata utile?

    0 commenti Nessun commento