Sto usando Visual Studio per creare un'applicazione GUI in C #. La Casella degli strumenti funge da elegante tavolozza di componenti che mi consente di trascinare e rilasciare facilmente i pulsanti e altri elementi (per chiarezza dirò pulsante ogni volta che intendo "controllo") sul mio modulo, il che rende le forme statiche abbastanza facili da fare. Tuttavia, ho riscontrato due problemi:
- La creazione dei pulsanti in primo luogo richiede molto lavoro. Quando ho un modulo che non è statico (es. Pulsanti o altri controlli vengono creati in fase di esecuzione in base a ciò che l'utente fa) non riesco affatto a usare la palette. Devo invece creare manualmente ciascun pulsante, chiamando il costruttore in qualsiasi metodo che sto utilizzando, quindi inizializzare manualmente specificando altezza, larghezza, posizione, etichetta, gestore di eventi e così via. Questo è estremamente noioso perché devo indovinare tutti questi parametri cosmetici senza essere in grado di vedere come apparirà il modulo e genera anche molte righe di codice ripetitivo per ogni pulsante.
- Far fare qualcosa ai pulsanti è anche molto lavoro. Gestire gli eventi in un'applicazione completa è un dolore enorme. L'unico modo in cui so come fare è selezionare un pulsante, andare alla scheda eventi nelle sue proprietà, fare clic
OnClick
sull'evento in modo che generi l'evento nelForm
codice, quindi riempire il corpo dell'evento. Poiché desidero separare la logica e la presentazione, tutti i gestori di eventi finiscono per essere chiamate a linea singola verso la funzione di logica aziendale appropriata. Ma usarlo per molti pulsanti (ad esempio, immagina il numero di pulsanti presenti in un'applicazione come MS Word) inquina il mio codiceForm
con dozzine di metodi di gestione degli eventi boilerplate ed è difficile mantenerlo.
Per questo motivo, qualsiasi programma di interfaccia grafica più complicato di Hello World è davvero poco pratico da realizzare per me. Per essere chiari, non ho alcun problema ad affrontare la complessità dei programmi che scrivo che hanno un'interfaccia utente minima: mi sento in grado di usare OOP con un discreto grado di competenza per strutturare in modo ordinato il mio codice di logica aziendale. Ma quando sviluppo la GUI, sono bloccato. Sembra così noioso che mi sento come se stessi reinventando la ruota, e c'è un libro da qualche parte là fuori che spiega come fare correttamente la GUI che non ho letto.
Mi sto perdendo qualcosa? O tutti gli sviluppatori C # accettano solo gli elenchi infiniti di gestori di eventi ripetitivi e codice di creazione di pulsanti?
Come suggerimento (si spera utile), mi aspetto che una buona risposta parlerà di:
- Utilizzo di tecniche OOP (come il modello di fabbrica) per semplificare la creazione ripetuta di pulsanti
- Combinando molti gestori di eventi in un unico metodo che controlla
Sender
per capire quale pulsante lo ha chiamato e si comporta di conseguenza - XAML e utilizzo di WPF invece di Windows Form
Non devi parlare di uno di questi, naturalmente. È solo la mia migliore ipotesi su quale tipo di risposta sto cercando.