Ricordo di aver appreso VB4 e di aver trascinato un pulsante su un modulo, di aver fatto doppio clic su quel pulsante e di aver digitato il codice nel gestore di eventi di cui ero stato magicamente benedetto. Venendo da QBASIC, ero entusiasta della "V" in "VB", il visual designer era letteralmente la cosa migliore da quando era stato tagliato il pane.
Ovviamente potresti fare tutto ciò programmaticamente, ma la magia della "V" era così attraente che non potevi fare a meno di trascinare quel pulsante. Siamo stati incoraggiati a prendere quella strada.
Ma poi qualche anno fa ho iniziato a conoscere C # e il framework .net e sono rimasto affascinato dal modo in cui tutto ciò che pensavo di sapere fosse appena uscito dalla finestra. C'è molta magia in atto in VB6 che è stata completamente svelata in .net: prendiamo InitializeComponents
ad esempio i costruttori e il metodo. In quest'ultima troverai tutte le istanze di controllo trascinate 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 sento di non "possedere" ciò che sta accadendo, questo codice che posso modificare solo tramite il designer mi infastidisce. Ogni volta che copi un pulsante che dice "Ok" da una forma all'altra (a volte insieme a suo fratello "Annulla"), stai effettivamente duplicando il codice, e questo è un peccato non è vero? SECCO, non ripeterti, dice il Papa .
Religioni e scuole di pensiero a parte, in tutta l'obiettività, non dovremmo invece derivare forme dalle forme di base, e avere il pulsante "Ok" (e tutti i suoi amici) vivere sulla forma di base? Qualcosa di simile a a FormBase
da cui deriva a DialogFormBase
; tutte le classi create in pochissimo tempo ... digitando il codice. I pulsanti vengono creati in base al modo in cui la classe viene istanziata (ovvero un argomento enum del costruttore determina quali pulsanti devono essere creati), i controlli vengono disposti all'interno di una disposizione di pannelli divisi e pannelli di layout del flusso, iniettati nel modulo comeContent
che si adatta al pannello dei contenuti principale. Non è quello che fa ASP.net con le pagine mastro e i segnaposto dei contenuti? Deriverei un modulo quando ho bisogno di una nuova "pagina principale", ma questa nuova "pagina principale" deriva ancora da una classe di modulo di base in modo che gli elementi visivi siano coerenti in tutta l'applicazione.
Per me questo è molto più riutilizzo del codice rispetto a qualsiasi altra cosa che abbia mai fatto con il designer in WinForms, e non è stato nemmeno difficile, e il codice non è ingombro con un metodo di 200 righe su cui non ho alcun controllo, posso inserire commenti dove mi piace, non verranno sovrascritti da un designer. Immagino sia solo una questione di motivi e architettura, che è ciò che mi ha portato a questo link: il miglior design per i moduli di Windows che condividerà funzionalità comuni , in cui mi sono reso conto di essere perfetto, tranne la risposta lì, suggerisce esattamente cosa sono facendo, ma è consigliando contro sotto forma di successione a causa di considerazioni di design. Questa è la parte che non capisco .a causa di considerazioni sulla struttura del codice, in particolare per quanto riguarda la forma e il controllo dell'ereditarietà, che non vedo alcun motivo per evitare se non che si rompe il progettista .
Non possiamo essere solo pigri, quindi quale parte mi manca?