Ricordo di aver imparato VB4 e di aver trascinato un pulsante su un modulo, facendo doppio clic su quel pulsante e digitando il codice in quel gestore di eventi con cui ero appena stato magicamente benedetto. Venendo da QBASIC ero elettrizzato dalla "V" in "VB", il visual designer era letteralmente la cosa migliore dopo il pane a fette.
Ovviamente si poteva fare tutto programmaticamente ma la magia della "V" era così attraente che non si poteva fare a meno di trascinare quel pulsante. Siamo stati incoraggiati a seguire questa strada.
Ma poi alcuni anni fa ho iniziato a conoscere C # e il framework .net ed ero affascinato dal modo in cui tutto quello che pensavo di sapere fosse appena uscito dalla finestra. C'è un sacco di magic in corso in VB6 che è completamente svelato in .net: take constructors e il metodo InitializeComponents
per esempio. In quest'ultimo troverai tutte le istanze di controllo che hai trascinato dalla casella degli strumenti, tutti gli eventi che hai registrato e le proprietà che hai impostato nella finestra di progettazione.
E va bene ... credo. È solo che, mi sembra di non "possedere" quello che sta succedendo, questo codice che posso modificare solo tramite il designer mi infastidisce. Ogni volta che copi un pulsante che dice "Ok" da un modulo a un altro (a volte insieme al suo fratello "Annulla"), stai effettivamente duplicando il codice, e questo è un peccato non è vero? ASCIUTTO, non ripeterti, dice il Papa .
Religioni e scuole di pensiero a parte, in tutta obiettività, non dovremmo invece ricavare forme dalle forme di base e avere il pulsante "Ok" (e tutti i suoi amici) in diretta sul modulo di base? Qualcosa come un FormBase
da cui deriva un DialogFormBase
; tutte le classi create in pochissimo tempo ... digitando il codice. I pulsanti vengono creati in base a come viene instanciata la classe (ovvero un argomento enum costruttore determina quali pulsanti devono essere creati), i controlli sono disposti all'interno di una disposizione di pannelli divisi e pannelli di layout del flusso, iniettati nel modulo come Content
che si inserisce nel pannello dei contenuti principale. Non è questo ciò che ASP.net fa con le pagine master e i segnaposto dei contenuti? Vorrei ricavare un modulo quando ho bisogno di una nuova "pagina master", ma questa nuova "pagina master" deriva ancora da una classe di modulo di base in modo che le immagini siano coerenti in tutta l'applicazione.
Per me è molto più riuso del codice di qualsiasi altra cosa che abbia mai fatto con il designer in WinForms, e non era nemmeno difficile, e il codice non è ingombro di 200 righe metodo su cui non ho controllo, posso inserire commenti dove mi piace, non verranno sovrascritti da un designer. Immagino sia solo una questione di schemi e architettura, che è quello che mi ha portato a questo link: Miglior design per i moduli di Windows che condivideranno funzionalità comuni , in cui mi sono reso conto che ero in grado di individuare, eccetto la risposta lì, suggerisce esattamente quello che sto facendo, ma si consiglia contro l'ereditarietà perché delle considerazioni del progettista. Questa è la parte che non ho . Preferirei consigliare contro usando il designer perché delle considerazioni sulla struttura del codice, specialmente per quanto riguarda la forma e l'ereditarietà del controllo, che non vedo alcun motivo per evitare altro che bene rompe il designer .
Non possiamo essere solo pigri, quindi quale parte mi manca?