Rieccomi, :ciao: oggi imperverso con i miei interrogativi, non pichiatemi!
Nel form su cui sto lavorando ho descritto un pulsante "CARICO SARTA" che comanda una variabile boolean SwSart, il mio intendimento sarebbe avere il pulsante colorato in Rosso se la variabile è False ed invece in Verde se la variabile è True.
Per fare ciò ho descritto il seguente evento:
Public Sub ButtonCaricoSarta_Click()
'############################################################# Inserimento / disinserimento del flag CARICO SARTA #####
If SwSart = False
SwSart = True
ButtonCaricoSarta.Background = &00FF00
Else
SwSart = False
ButtonCaricoSarta.Background = &FF0000
Endif
End
Purtroppo ciò che mi pareva poter funzionare a dovere non pare dare i risultati sperati, :hard: in effetti il pulsante all'entrata della sezione viene settato .Enabled=True e con il background rosso che appena cliccato diventa Verde, purtroppo ad un secondo click non si ripristina il colore verde anche se la variabile viene cambiata a dovere: qual'è il problema che mi affligge? Vi ringrazio.
Ciao a tutti. :ciao:
A me funziona sia con QT che con GTK :-\
Potresti scriverlo così e risparmi il booleano, se non ti serve al di fuori di qui:
If ButtonCaricoSarta.Background = &00FF00 Then
ButtonCaricoSarta.Background = &FF0000
Else
ButtonCaricoSarta.Background = &00FF00
Endif
:ciao: :ciao:
Intendi una cosa così?:
Private SwSart As Boolean
Public Sub ButtonCaricoSarta_Click()
'############################################################# Inserimento / disinserimento del flag CARICO SARTA #####
If SwSart = False
ButtonCaricoSarta.Background = &FF0000
SwSart = True
Else
ButtonCaricoSarta.Background = &00FF00
SwSart = False
Endif
End
Public Sub Form_Open()
SwSart = True
ButtonCaricoSarta_Click()
End
:ciao:
Intendi una cosa così?:
Private SwSart As Boolean
Public Sub ButtonCaricoSarta_Click()
'############################################################# Inserimento / disinserimento del flag CARICO SARTA #####
If SwSart = False
ButtonCaricoSarta.Background = &FF0000
SwSart = True
Else
ButtonCaricoSarta.Background = &00FF00
SwSart = False
Endif
End
Public Sub Form_Open()
SwSart = True
ButtonCaricoSarta_Click()
End
Beh! Penso che i due listati corrispondano per molto, a dire il vero la variabile SwSart e stata dichiarata come public e non come private, la seconda cosa che mi desta interrogativi è la seconda parte del listato (quella all'interno della sub Form_open) non capisco a cosa possa servire la chiamata
ButtonCaricoSarta_Click()
al suo interno. In ogni caso grazie GianLuigi per i suggerimenti
:ciao:
in parole brevi ciò che desidero è che con SwSart=False il pulsante abbia il background rosso, mentre in ogni caso con SwSart=True il pulsante abbia il backgroundverde.
Non mi è molto chiaro (https://www.classicrockforums.com/styles/default/xenforo/smilies/humm.gif) se tu vuoi che, quando il pulsante è "rosso", anche la variabile booleana globale assuma il valore di False.
Cioè così:
Private bo As Boolean
Public Sub Button1_Click()
If bo = True
Button1.Background = Color.Red
bo = False
Else
Button1.Background = Color.Green
bo = True
Endif
End
In caso negativo, dovresti allora mostrare un breve codice funzionante che riproduca il problema da te posto.
Prima di continuare con il discorso desidero in ogni caso ringraziarvi per l'attenzione che state dedicando alla mia problematica.
Vorrei però introdurre una nuova riflessione: potrebbe darsi che all'interno di un evento _Click che interessi l'oggetto su cui sto lavorando non si possa modificare l'attributo .Background dell'oggetto stesso; mi spiego in un altro punto del del listato la direttiva ButtonCaricoSarta.Background = <colore da me scelto> funziona tranquillamente ho perciò la cosa mi ha messo dei dubbi. Ho allora introdotto introdotto questo altro segmento di codice:
Public Sub ButtonCaricoSarta_LostFocus()
If SwSart = False
ButtonCaricoSarta.Background = &FF0000
Else
ButtonCaricoSarta.Background = &00FF00
Endif
End
Ed ecco cosa succede: dopo aver eseguito altre operazioni su oggetti nella parte superiore della form (Data preceduta da del nella schermata allegata) terminando con un invio si attiva il pulsante Carico sarta con sfondo rosso, a quel punto SwSart è False cioè inattivo e il tutto è giusto, quindi clicco sul pulsante e spostando il mouse lo sfondo diventa verde, SwSart è True cioè attivo ed il tutto è di nuovo giusto, a questo punto torno a cliccare sul pulsante, ma spostando il mouse lo sfondo resta verde mentre SwSart è divenuto False e questo non va bene, ma basta che io dia un Tab che si scatena l'evento sopra riportato ed il tasto prende la colorazione giusta cioè rossa, ciò vuol dire che l'istruzione ButtonCaricoSarta.Background = &FF0000 nell'evento _LostFocus() ha funzionato mentre nell'evento _Click() non ha funzionato.
Che ne dite?
Ciao a tutti e grazie!
Grazie vuott per il tuo interessamento;
spostando il mouse lo sfondo diventa verde, SwSart è True cioè attivo
Scusami, quale riga di comando fa diventare True la variabile SwSart, all'atto dello spostamento del mouse sul tasto ? :-X
La riga di comando che porta la variabile SwSart a true è contenuta in questo codice:
Public Sub ButtonCaricoSarta_Click()
'############################################################# Inserimento / disinserimento del flag CARICO SARTA #####
If SwSart = False
SwSart = True
ButtonCaricoSarta.Background = &00FF00
Else
SwSart = False
ButtonCaricoSarta.Background = &FF0000
Endif
End
Il problema e che con questo evento (_click) il background non si modifica come ho sperimentato nel mio primo messaggio.
Questo altro brano di codice che ho evidenziato nel mio ultimo messaggio
Public Sub ButtonCaricoSarta_LostFocus()
If SwSart = False
ButtonCaricoSarta.Background = &FF0000
Else
ButtonCaricoSarta.Background = &00FF00
Endif
End
non fa altro che, alla perdita del focus, andare a verificare il valore di SwSart ed accordare il background con lo stato della variabile, in questo evento il background si riesce a modificare e anche se tardivamente l'ameniccolo pare funzionare.
Cio che dici Gianluigi mi trova comunque d'accordo
Io mi sto perdendo, non capisco cosa vuoi dire.
Qualunque evento se scatenato è in grado di cambiare i colori di fondo.
Se vuoi che ti possa aiutare dovresti descrivere, l'algoritmo che stai inseguendo, nella maniera più semplificata possibile ma che possa consentirmi di capire.
Qualcosa tipo l'ipotesi che ho fatto io.
:ciao:
In effetti, a rigor di logica, la realtà e quella che tu scrivi: qualsiasi evento se scatenato è in grado di cambiare i colori di fondo, ma sperimentalmente ciò non si verifica, la casistica che ho verifcato è questa:
Quando viene attivato il bottone Carico sarta viene anche settato il colore rosso di sfondo, poi volendo cliccare il pulsante porto il puntatore sullo stesso, questo reagisce diventando azzurro, potrebbe essere questo il comportamento che interferisce, e quindi clicco, a questo punto si scatena l'evento _click, intervengono le due istruzioni che scambiano i settaggi sia della variabile che della colorazione dello sfondo, spostando il mouse la colorazione cambia in verde, e fin qui pare tutto regolare, ma probabilmente non è così perché torno sul pulsante, questo di nuovo diventa azzurro e clicco una seconda volta, di nuovo si scatena l'evento _click, ma spostandomi con il mouse la colorazione del pulsante rimane verde e non segue più il mutare della variabile
Ciao Gianluigi e grazie!
Facciamo un'ipotesi di algoritmo, io carico attraverso delle textbox, dei checkbox e dei combobox i dati per la sarta, se il pulsante che valuta (penso sia caricosarta) valuta che tutti gli inserimenti vanno bene allora cambierà lo stato del booleano a true altrimenti a false. Ma prima del valutatore che sarà posta in fondo alla routine e che dovrà solo vedere se il booleano è a true o false e in base a questo cambiare il colore e basta.
Come ho avuto modo di poter spiegare in un messaggio privato spedito oggi a GianLuigi, e come sperro di spiegarmi altrettanto bene ora, il pulsante Carico sarta non serve ad altro che a settare un flag che dice: "Questa lavorazione è a carico della sarta" ma non fa altre valutazioni, il fatto che volevo cambiare il background era solo per avere graficamente la visione che si era settato il flag, niente di più.
Public Sub ButtonCaricoSarta_Click()
'############################################################# Inserimento / disinserimento del flag CARICO SARTA #####
If SwSart = False
SwSart = True
ButtonCaricoSarta.Background = &00FF00
Else
SwSart = False
ButtonCaricoSarta.Background = &FF0000
Endif
End
In poche parole quando si va a schiacciare quel pulsante il programma si chiede in che condizione è lo switch SwSart e lo modifica di conseguenza colorando il pulsante di verde se il flag diventa attivo (true) o di rosso se diventa passivo (false); tutto ciò per poter avere il controllo su quella condizione prima della conferma di quella parte di inserimenti.
Se vedete lo scrrenshoot allegato potrete individuare i dati come N.Capi, Nominativo ed il pulsante Carico Sarta.
Dopo quella conferma i dati succitati (compreso lo stato del flag) verranno memorizzati in un Array generale ove vengono registrati tutti i dati del D.D.T. in corso, naturalmente a termine bolla questi dati verranno stampati (in questo momento su un modulo a snap-out di una nota ditta di materiale per ufficio) e poi registrati in un apposito file.
Volendovela dire tutta ci sarà poi un secondo programma che analizzerà il file registrato e da quello ricaverà una fattura mensile per ogni negozio.
Questo è il progetto che sto cercando di sviluppare e che già gira su una evoluzione di un computer Sinclari Ql.
Comunque come segnalo nella risposta n. 15 ho trovato un palliativo per recuperare almeno parzialmente la funzionalità del pulsante, il problema e che se voglio poter avere la possibilità di modificare il pulsante non devo perdere il fuoco verso il pulsante di conferma.
Ringrazio tutti per la pazienza.
Caioooo :ciao: