2009-09-21 16 views
20

Ho un'idea generale, e ci sono alcuni casi ovvi, ma ci sono anche alcune aree grigie per me - quando è meglio usare per estendere da un componente e quando è meglio creare un controllo utente? Questo riguarda uno specifico problema di lavoro che sto cercando di risolvere, ma le specifiche di questo non sono importanti - una risposta generale a questa domanda è abbastanza per me.Quando aggiungere una classe componente o un controllo utente?

risposta

16

In WPF e Windows Form, entrambi, la differenza principale è che un UserControl è pensato per essere una raccolta di controlli - un singolo oggetto riutilizzabile "composto" da più controlli.

Avresti implementato un Component/CustomControl/Control invece di un UserControl se stai facendo un singolo controllo primitivo con un nuovo comportamento, invece di creare un "controllo" composto da controlli più piccoli. Il componente di solito è un comportamento non visivo, in cui un controllo/controllo personalizzato di solito è per un controllo visivo.

5

In generale, vorrei usare Component quando il controllo non ha alcuna interfaccia utente (o almeno non quella presente nel modulo). Se si tratta di un controllo dell'interfaccia utente, creerei invece un User Control.

4

Solitamente estendo Control, o più ofter UserControl, solo quando voglio impacchettare alcune funzionalità dell'interfaccia utente. Per Componenti, penso all'esempio classico, il Timer. Può essere rilasciato sul progettista, configurato tramite il riquadro Proprietà e quindi accessibile a livello di programmazione tramite il codice sottostante. In breve, estendo Component quando voglio essere in grado di manipolare alcuni stati e comportamenti raggruppati, un oggetto senza interfaccia utente, attraverso il progettista.

12

C'è una differenza significativa tra un componente e un controllo: i controlli hanno un'interfaccia utente. Tutti i controlli sono anche componenti, ma non tutti i componenti sono controlli. Se è necessario visualizzare un'interfaccia utente, derivante da qualche tipo di base di controllo (Control, UserControl, Form, ecc.) Di solito è necessario. Se si ha solo un comportamento, come nel caso del componente BackgroundWorker, sarà necessario derivare direttamente da Component.

Un'altra nota ... sia i componenti che i controlli possono essere lasciati cadere su una superficie di progettazione. I componenti appaiono come un'icona e un'etichetta in un'area speciale, i controlli appaiono direttamente sulla superficie del progetto. Tuttavia, c'è una terza cosa che puoi usare: una semplice classe. Se non hai bisogno del supporto per la superficie di progettazione, ti consiglio di utilizzare una classe semplice anziché Component o Control. Sono più leggeri e meno gonfiati quando tutto ciò che serve è un comportamento puro al 100% senza supporto per la progettazione.

Problemi correlati