View Full Version : [C#]Cambiare colore di sfondo form a mò di lampeggio
Salve,
devo cambiare colore di sfondo di un form (windows mobile 2003) in modo che emulasse un lampeggio, cioè passare da colore bianco a rosso dopo un tot di millisecondi. Ho un oggetto timer che ogni secondo esegue un operazione:
this.BackColor = System.Drawing.Color.Red;
Thread.Sleep(100);
this.BackColor = System.Drawing.Color.White;
e noto che il colore non cambia o meglio il colore diventa quello indicato dopo lo sleep e non si vede l'effetto lampeggio.
Dove ho sbagliato?
NapalM
No, hai già un Timer, che te ne fai dello Sleep ?
private void timer1_Tick(object sender, EventArgs e)
{
if (this.BackColor == System.Drawing.Color.Red){
this.BackColor = System.Drawing.Color.White;
}
else {
this.BackColor = System.Drawing.Color.Red;
}
}
;)
||ElChE||88
03-04-2009, 20:19
No, hai già un Timer, che te ne fai dello Sleep ?
private void timer1_Tick(object sender, EventArgs e)
{
if (this.BackColor == System.Drawing.Color.Red){
this.BackColor = System.Drawing.Color.White;
}
else {
this.BackColor = System.Drawing.Color.Red;
}
}
;)
Perché usi il this?
Kralizek
03-04-2009, 20:39
io lo uso sempre quando sto usando membri della classe, form o page che sia. Così distinguo facilmente tra membri e variabili locali.
||ElChE||88
03-04-2009, 20:42
io lo uso sempre quando sto usando membri della classe, form o page che sia. Così distinguo facilmente tra membri e variabili locali.
Boh, a me sembra ridondante.
In linea di massima sono d'accordo con Kralizek ( sei uno dei pochi che mi capisce :D ). In questo caso il motivo era semplicemente riutilizzare il codice di Napalm e far notare le uniche differenze con il mio. ;)
Kralizek
04-04-2009, 01:26
Boh, a me sembra ridondante.
Quando si lavora in un team ogni ridondanza può aiutare gli altri a capire il tuo codice. Un po' come l'indentatura ed i commenti (quando non sono scritti in svedese, scorretto tra l'altro :muro: )
In linea di massima sono d'accordo con Kralizek ( sei uno dei pochi che mi capisce :D ).
Altro motivo per cui sono abituato ad usare la keyword this è perchè gioco molto con la derivazione, polimorfismo e generics. con this e base sai sempre esattamente quale metodo stai chiamando.
Un esempio pratico:
public class MiaLista : List<MioOggetto>
{
public new void Add(MioOggetto item)
{
if (item.Proprieta1.Length > 0)
Add(item);
}
public void Add(string proprieta1, int proprieta2, bool proprieta3)
{
MioOggetto item = new MioOggetto ( proprieta1, proprieta2, proprieta3);
Add(item);
}
...
}
Nel primo metodo se non specifico "base" do luogo ad uno StackOverflow, nel secondo, se non specifico "this", non è intuitivo capire cosa sto chimando.
Insomma, 5 caratteri in più non guastano ed aiutanto tanto la comprensione tua quanto quella di altri. ;)
||ElChE||88
04-04-2009, 02:36
Quando si lavora in un team ogni ridondanza può aiutare gli altri a capire il tuo codice. Un po' come l'indentatura ed i commenti (quando non sono scritti in svedese, scorretto tra l'altro :muro: )
Questo lo so... sono all'università e già vedo codice mal scritto, pieno di commenti inutili dappertutto (il top è uno che scrive i commenti, i metodi e le variabili in gaelico... :muro: ).
Nel primo metodo se non specifico "base" do luogo ad uno StackOverflow, nel secondo, se non specifico "this", non è intuitivo capire cosa sto chimando.
Sisi, ma in questo caso il base è una scleta obbligata.
Insomma, 5 caratteri in più non guastano ed aiutanto tanto la comprensione tua quanto quella di altri. ;)
In effetti non sembra stupido... soprattutto se usato nelle Forms. Ci farò un pensierino. :O
Cmq, Napalm, aumenta anche l'intervallo del Timer. 100 msec sono da mal di testa ! :D
No, hai già un Timer, che te ne fai dello Sleep ?
private void timer1_Tick(object sender, EventArgs e)
{
if (this.BackColor == System.Drawing.Color.Red){
this.BackColor = System.Drawing.Color.White;
}
else {
this.BackColor = System.Drawing.Color.Red;
}
}
;)
mhmh non se pole, nel senso non è quello che vorrei fare io: il timer ha uno tick di 1 sec quindi in pratica rimarrebbe colorato per 1 secondo di rosso poi diventerebbe bianco ecc.. nella tua soluzione mentre io vorrei che fosse proprio un lampeggio di 100 msec e basta (questo perché il timer deve obbligatoriamente avere un tick di 1 sec)
Teoricamente dovrei aver trovato la soluzione: un timer nel timer e via :D
Grazie :)
NapalM
Cmq, Napalm, aumenta anche l'intervallo del Timer. 100 msec sono da mal di testa ! :D
ihih si ma tanto dura solo 5 secondi, ed è un segnale visivo perché l'utente potrebbe essere distante dal palmare (infatti è accoppiato ad un segnale audio) :)
NapalM
mhmh non se pole, nel senso non è quello che vorrei fare io: il timer ha uno tick di 1 sec quindi in pratica rimarrebbe colorato per 1 secondo di rosso poi diventerebbe bianco ecc.. nella tua soluzione mentre io vorrei che fosse proprio un lampeggio di 100 msec e basta (questo perché il timer deve obbligatoriamente avere un tick di 1 sec)
Teoricamente dovrei aver trovato la soluzione: un timer nel timer e via :D
Grazie :)
NapalM
Ma, scusa eh, nessuno ti vieta di fare tutto nello stesso identico Timer.
Imposti l'intervallo ad esempio a 100ms, e fai gestire il cambio di colore ogni 100 ms.
Per tutto il resto ( codice da eseguire ogni secondo = 1000 msec ) basta che crei un contatore esterno ( variabile privata a livello di Form ), e quando raggiunge un multiplo di 10 ( 10x100 ms = 1 sec ), lo esegue. ;)
Ciao Marco, la tua soluzione è possibile ma riflettendoci sopra ho creato una classe generica dove gli passo l'oggetto, quanti "lampeggi", tempo fra i "lampeggi" e colore da inserire in modo da poterlo riutilizzare in altre cose :)
NapalM
Niente da ridire, il codice riutilizzabile è sempre la scelta migliore. :)
Niente da ridire, il codice riutilizzabile è sempre la scelta migliore. :)
giusto, grazie mille cmq per la consulenza ;)
NapalM
vBulletin® v3.6.4, Copyright ©2000-2026, Jelsoft Enterprises Ltd.