Antologiko ha scritto:
Buonasera a tutti. Come da oggetto, sotto WinForms, mi farebbe assai comodo per un'applicazione che contiene parecchi controlli, un componente o meglio un design pattern generico, che mi permetta di:
1) Definire delle 'condizioni' o se preferite 'stati' predefiniti per l'applicazione, come ad es. FileOpened, RecordSelected, ClipboardContainsText, e chi più ne ha più ne metta a seconda di quello che deve fare l'applicazione;
2) associare ad ogni condizione uno o più controlli WinForms;
3) Il componente / design-pattern provvederà quindi in automatico ad impostare la proprietà Enabled dei controlli associati ad una condizione quando questa cambia.
Per la verità sto già provando a creare qualcosa che funzionerebbe anche, ma ho paura che sia poco efficiente. Il punto in cui mi impantano è nel definire e soprattutto gestire in modo efficiente le 'condizioni composite' cioè dipendenti a loro volta da sotto-condizioni.
Se volete allego un po del codice che ho scritto finora (posso?).
Un saluto
In pratica, quello che vorresti implementare è qualcosa di molto simile a un pattern
MVVM.
Credo che una impostazione simile sia più facile da implementare usando
WPF, che la supporta come si dice "out of the box", però potresti trovare diversi paliativi anche per
Windows Forms.
La soluzione più rapida che posso consigliarti è agganciare un gestore all'evento
OnIdle dell'oggetto
Application: si tratta di un evento che viene eseguito ogni volta che l'applicazione torna nello stato "inattivo", inteso come "fine della gestione dell'ultimo evento e subentro in attesa di nuovi eventi".
Potresti gestire questo evento concentrando al suo interno tutta la logica che definisce lo stato dei controlli di tuo interesse (es.
Enabled,
Visible, ecc.) in base alle variabili e allo stato di altri controlli e/o oggetti.
Secondo me, è un approccio ben più comodo di istituire un metodo apposito che fa questo tipo di lavoro e doversi ricordare di invocarlo ovunque, pena il mancato aggiornamento della UI.
Ciao!