Comunicazione bidirezionale tra modulo e plugin

2

Ho iniziato a sviluppare uno strumento di supporto per un vecchio sistema legacy che non è più mantenuto ma che è ancora necessario per il prossimo futuro. Il sistema legacy offre pochi, goffi e metodi soggetti a errori per attività di base come la gestione di utenti, regole, importazioni di dati e impostazioni. Lo strumento che sto sviluppando sarà utilizzato dal team di supporto interno.

Uso pannelli per raggruppare attività correlate. Intendo caricare ciascun pannello in un TabControl su richiesta dell'utente. Il modulo principale ha alcune impostazioni utente che riguardano / tutti i pannelli. Un pannello può eseguire un'attività di cui altri pannelli devono essere consapevoli.

Domanda TL: DR

Come si può sapere a MainForm che Panel A ha apportato un cambiamento significativo a cui potrebbe interessare l'altro panels ?

Come può un pannello ricevere informazioni da MainForm ?

I miei pensieri fino ad ora:

Il MainForm potrebbe ottenere informazioni da ogni Panel sottoscrivendo eventi personalizzati (come UsersUpdatedEvent ). Ma come fare il contrario visto che un pannello non "conosce" il modulo genitore?

Esempio di utilizzo: Homer vuole aggiungere un utente e una nuova regola per la società "Duff Beer". Apre l'applicazione e seleziona "Birra Duff" da un elenco a discesa. Quindi fa clic sull'icona della barra degli strumenti "Utente" e il pannello utente si apre in una scheda. Homer crea l'utente "Lisa" e quindi passa al pannello "Regole" e crea una nuova regola di proprietà di Lisa.

Domanda bonus: Vorrei anche che ogni panel fosse in grado di aggiungere voci di menu a MainForm Menustrip . Ora che ci penso, l'applicazione è un po 'come un Visual Studio molto leggero. Con schede e menu e barre degli strumenti che cambiano a seconda di che cosa sta guardando l'utente.

    
posta David 14.04.2015 - 22:39
fonte

1 risposta

1

Prima di tutto, non utilizzare i pannelli per raggruppare attività correlate. Usa UserControls . Ho usato i pannelli per raggruppare i controlli sulla mia prima applicazione WinForms, e si è trasformata in un'orribile mostruosità, degna di apparire su TDWTF . Solo ... non farlo.

Invece, usa UserControl s. Questi sono un po 'come Window s, ma sono ospitati all'interno di un contenitore, simile a Button o ComboBox . Le chiamate a funzioni normali vengono utilizzate per la comunicazione da MainForm a UserControl . Gli eventi vengono utilizzati per la comunicazione da UserControl a MainForm .

Ad esempio, potresti avere un UserControl chiamato CreateNewUser . Conterrebbe una casella di testo per il nome del nuovo utente e un pulsante per creare un nuovo nome utente. Avrebbe anche bisogno di un modo per notificare al MainForm che il pulsante è stato cliccato.

Il singolo UserControls non ha bisogno di sapere del MainForm . Tutto quello che devono fare è fornire eventi pubblici (di solito personalizzati) che i loro genitori possono utilizzare. CreateNewUser non ha bisogno di preoccuparsi di cosa lo ha creato. Tutto ciò che CreateNewUser deve fare è far sapere al suo genitore quando l'utente ha creato un nuovo utente.

Per rispondere alla tua domanda ..

How can a panel [UserControl] receive information from MainForm?

Il pannello [UserControl] fornirà funzioni / metodi pubblici che il MainForm può chiamare. Il codice dietro l'interfaccia utente in WinForms è molto simile alle semplici vecchie classi C #. In effetti, lo sono. Possono avere metodi e proprietà pubbliche che chiunque può chiamare.

Ecco l'MSDN per WinForms UserControls: link

    
risposta data 14.04.2015 - 23:14
fonte

Leggi altre domande sui tag