Scusate, ma non sapevo che titolo dare al post. :-)
Per Happy Sign, ma non solo, ho creato un piccolo controllo che eredita direttamente dalla Label classica, ma che aggiunge qualche funzionalità in più. In breve, la RollerLabel contiene:
- una lista di stringhe da visualizzare una alla volta
- un colore per ogni stringa
- un timer interno con un Interval che decide quando cambiare la stringa visualizzata
In pratica, noi possiamo definire un set di stringhe da mostrare, una alla volta, sulla Label. Ogni n millisecondi il testo viene cambiato, ciclando le stringhe e ricominciando daccapo quando si arriva alla fine. Il controllo dispone di una proprietà EnabledRolling per avviare/fermare il timer. Dispone di una proprietà IntervalRolling per definire l'intervallo di tempo dopo il quale modificare la stringa. Ogni stringa può avere potenzialmente un colore diverso. Il controllo RollerLabel può essere configurato a design-time.
L'effetto è molto carino, devo dire. Se messo su una normale Windows Forms, la RollerLabel looppa (bello con 2 p!) tutte le stringhe che abbiamo definito. La RollerLabel solleva un'evento RollingLabelClick, che ovviamente può essere intercettato dalla UI e manipolato come volete voi. Inizialmente, avevo inserito all'interno del controllo la logica per far navigare l'utente da qualche parte: ad ogni stringa avevo associato anche un link. Quando l'utente cliccava, veniva aperto il browser all'URL indicato. Non mi era piaciuto molto, perchè ero troppo legato al fatto di voler navigare, cosa che non è sempre vera. Quindi, ho tolto questa feature e l'ho implementata come ho descritto prima: quando l'utente clicca sulla RollerLabel, viene notificato l'evento RollingLabelClick, che ha un parametro di tipo RollingLabelEventArgs (che eredita da EventArgs) e che permette di discriminare la Label correntemente visualizzata. In questo modo, possiamo fare qualsiasi cosa: aprire il browser, aprire una Windows Form nuova, mostrare una MessageBox, e così via.
Stasera non ho voglia di uscire (uno dei rari venerdì in casa), lavoro ai miei progetti freeware/opensource e se vi interessa fatemelo sapere.