Newsgroup: it.comp.appl.access
Titolo: Colore sfondo command button

Access 2013, 32 bit
Vorrei avere una cinquantina di command button ai quali cambiare, via 
vba, caption, colore caption, colore sfondo, font, ecc..
Inoltre sull'evento Click di ogni pulsante vorrei metterci una funzione 
al cui interno operare distinguendo quale tasto e' stato premuto
Diciamo fate conto di vedere una form di un gestionale campeggio, con 
tanti command button, ognuno fa riferimento ad una piazzola/auto/bungalow
Su una tabella db vorrei mantenere memoria delle caratteristiche singola 
postazione (piazzola auto, piazzola tenda, bungalow,...), visualizzare 
un nome sul command button, dargli colore sullo sfondo, e soprattutto 
reagire alla pressione di ogni command con un'unica funzione
All'interno della quale distinguere il command button premuto
Ho provato, dopo avere creato una funzione vuota del tipo
 
function elabora_postazione(byval caption_tasto as string)
 
inserendo nell'evento Click dei tasti la seguente
 
=elabora_postazione(screen.activecontrol.Caption)
 
ma spara fuori un errore del tipo "Valutazione di una o piu' espressioni 
non riuscita. Una delle espressioni contiene un riferimento a 'caption' "
 
Oltre a questo, il BackColor dei command button non sembra funzionare, 
pur essendo presente la proprieta', il colore visualizzato resta sempre 
grigio chiaro
Funziona sto BackColor oppure per i command button non va' ?
 


Perchè non inizi ad usare le CLASSI...?
Crei una classe che eredita l'oggetto COMMANDBUTTON con i suoi eventi ed inserisci in questa classe le Proprietà tipiche dell'oggetto che stai Valutando..
 
Es. se parliamo di una piazzola di un campeggio avrai una proprietà TipoPiazzola... poi ti predisponi delle Enum che possono valorizzare la proprietà...!
 
Una collection che contenga tutte le PIAZZOLE(ed relativi Button)...
 
Classe Piazzola(clsButton)
 
Option Compare Database
Option Explicit
 
Public Enum eType
   PostoAuto
   Tenda
   Bungalow
   Roulotte
End Enum
 
Private WithEvents mCmdButt     As Access.CommandButton
Private mType                   As eType
 
Public Property Set Control(ctl As Access.CommandButton)
   Set mCmdButt=ctl
   mCmdButt.OnClick = "[Event Procedure]"
   mCmdButt.OnMouseMove = "[Event Procedure]"
   mCmdButt.OnMouseUp = "[Event Procedure]"
End Property
 
Property Get Control() As Access.CommandButton
    Set Control = mCmdButt
End Property
 
Property Get TipoPiazzola() As eType
   TipoPiazzola= mType
End Property
 
Public Property Let TipoPiazzola(Value As eType)
    mType= Value
End Property
 
ecc...
 
In questo modo non devi scrivere 1 riga di codice nella Form, in quanto gli EVENTI sono di Classe istanziata... quindi sai già quello che deve fare...!
 
Tuttalpiù io fare una MasterClass che istanzia la Collection di Classi(Button/Piazzola)... in modo da avere l'interfaccia ad eventi Master.
 
Nella Classe MASTER dichiari una Collection e la doti di Metodo ADD:
 
Classe MasterPiazzole [clsButtons]
 
Option Compare Database
Option Explicit
 
' ===================================================
' EVENTI PUBLIC DI CLASSE
' ===================================================
Public Event Click(Oggetto As clsButton)
 
Private mcClsButtons        As Collection
 
Public Function Add(obj As Access.CommandButton) As Object
    On Error GoTo Proc_Err
 
    Dim curClass As mclsControl
    If Not Exists(obj.Name) Then
        Set curClass = New clsButton
        Set curClass.Control=obj
 
        mcClsButtons.Add curClass, obj.Name
    Else
        Set curClass = mcClsButtons(obj.Name)
    End If
    Set Add = curClass
 
Proc_Exit:
    Exit Function
 
Proc_Err:
 
    Resume Proc_Exit
End Function
 
Friend Sub Control_Click(Item As clsButton)
   RaiseEvent Click(Item)
End Sub
 
Ora se dichiari nella maschera WITH Events la CLASSE MASTER(clsButtons) erediti gli eventi nel caso serva che sono visibili nella Form...
 
Sembra complicata ma è banale. 
 
@Alex

@Alex explained on 25-03-19 :

Cazzo... che Lectio Magistralis!
 
Bruno


Ora mi rileggo tutto e provo
Grazie


Se non lo hai mai fatto sarà complicato... più che altro capire...!
Se vuoi fare una cosa con 3 Button posso buttarti giù qualche cosa di veloce nei prossimi gg... ovviamente  BASICA...
 
@Alex


Avere del codice da seguire sarebbe una gran cosa
Quello che non mi e' ancora chiaro e' come mai il cambio valore da 
codice, sulla proprieta' BackColor del tasto, non produca effetti
Dimentico qualcosa io (refresh, repaint, doevents,...) oppure e' un baco 
noto?


Il Button per poter cambiare colore da CODICE devi impostare la proprietà USA TEMA=SI (ovviamente non deve essere Trasparente).
 
Il Demo è sostanzialmente fatto perchè lo avevo preparato per un corsetto...
 
Non ho la tua MAIL, se vuoi scrivermi o mandarmi una mail oppure darmi il tuo indirizzo, domani te lo mando.
 
Ciao
@Alex


Clap....Clap...Clap...   :-)
 
Daniele
 
 
 

Ciao raggazzaccio ;-)
 
@Alex