Design pattern per l'abilitazione automatica di elementi della GUI

di il
2 risposte

Design pattern per l'abilitazione automatica di elementi della GUI

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

2 Risposte

  • Re: Design pattern per l'abilitazione automatica di elementi della GUI

    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!
  • Re: Design pattern per l'abilitazione automatica di elementi della GUI

    Ciao, grazie come sempre per l'interessante risposta, non conoscevo l'evento OnIdle.
    Il pattern MVVM è una di quelle cose che devo imparare ma non faccio mai .
    Nel frattempo ho terminato una piccola libreria che fornisce gli oggetti per la gestione dello stato nel modo che avevo in mente.
    Domani comincio a provarla, anche se mi sembra di beccare una mosca con un cannone.
Devi accedere o registrarti per scrivere nel forum
2 risposte