Solitamente non solo uno sviluppatore vicino allo sviluppo di UI e WindowForms... in questi giorni mi sono ritrovato a implementare una semplice e veloce applicazione windows. Non ho potuto fare a meno di notare che qui e la nella gestione degli eventi il buon senso mi _costringeva_ a scrivere del codice ripetitivo per gestire il comportamento dell'UI durante lo svolgimento del codice... in particolare sarebbe corretto impostare/controllare il comportamento del cursore. Insomma più o meno il codice che andavo a scrivere nella getsione del click dei vari bottoni aveva una ricorrente struttura che più o meno suona come quella che segue.
private myButton_Click(object sender, EventArgs e)
{
Cursor.Current = Cursors.WaitCursor;
try
{
//...Implementation
}
finally
{
Cursor.Current = Cursors.Default;
}
}
Questo sabato ho iniziato a ragionare quale potrebbe essere un metodo interessante per evitare la ripetizione di codice e allo stesso tempo non perdere in lettura.... anzi il meglio sarebbe poter scrivere del codice quanto più pulito e semplice in modo che guardano il codice dell'handler del bottone non mi perdessi nel capire arzigolate strutture di codice. Per questo motivo ho subito scartato l'uso di delegate, metodi anonimi e tecniche correlate e/o similari...
Quello che ne ho ricavato è la definizione di un "UIBehaviuorScope"...
class UIBehaviuorScope: IDisposable
{
public UIBehaviuorScope(Cursor cursor)
{
Cursor.Current = cursor;
}
#region IDisposable Members
public void Dispose()
{
Cursor.Current = Cursors.Default;
}
#endregion
}
...che poi messo in pratica ...
private myButton_Click(object sender, EventArgs e)
{
using (UIBehaviuorScope scope = new UIBehaviuorScope(Cursors.WaitCursor))
{
//Implementation
}
}
Anche se l'idea potrebbe essere ritenuta interessante non mi soddisfa totalmente ma potrebbe essere qualcosa di interssante da testare in casi reali... La soluzione migliore credo che possa essere quella di definire un attributo (esempio "UIBehaviourAttribute") che aiuti ad autocompletare il codice "ripetitivo"... sarebbe quindi davvero interessante se si potesse scrivere qualcosa come quanto segue.
[System.Windows.Forms.UIBehaviour(WaitCursor = True)]
private myButton_Click(object sender, EventArgs e)
{
//Implementation
}
Forte della convinzione che sia davvero qualcosa di utile nell'implentazione delle UI ho postato questo mio suggerimento su "lady-bug", "UI Behavoiur Attribute" , con quel mio inglese un pò maccaronico ;-p Che dite l'idea è proprio così balsana?!
posted @ sabato 15 aprile 2006 20:54