2009-09-21 28 views
20

Tengo una idea general, y hay algunos casos obvios, pero también hay algunas áreas grises para mí: ¿cuándo es mejor usar para extender desde un componente y cuándo es mejor crear un control de usuario? Esto se refiere a un problema de trabajo específico que estoy tratando de resolver, pero los detalles de eso no son importantes; una respuesta general a esta pregunta es suficiente para mí.Cuándo agregar una clase de componente vs control de usuario?

Respuesta

16

En WPF y Windows Forms, ambos, la diferencia principal es que un UserControl está destinado a ser una colección de controles, un objeto único reutilizable, "compuesto" a partir de múltiples controles.

Debería impeler un Component/CustomControl/Control en lugar de un UserControl si está realizando un control único y primitivo con un nuevo comportamiento, en lugar de hacer un "control" compuesto por controles más pequeños. Componente generalmente es un comportamiento no visual, donde un control/control personalizado suele ser para un control visual.

5

En general, usaría Component cuando el control no tiene ninguna interfaz de usuario (o al menos no una que esté presente en el formulario). Si es un control de IU, crearía un User Control en su lugar.

4

Normalmente extiendo Control, o más de UserControl, solo cuando deseo empaquetar algunas funciones de UI. Para los componentes, pienso en el ejemplo clásico, el temporizador. Se puede soltar en el diseñador, configurarse a través del panel Propiedades y luego acceder mediante programación a través del código subyacente. En resumen, extiendo Component cuando quiero poder manipular un estado y comportamiento combinados, un objeto sin IU, a través del diseñador.

12

Hay una diferencia significativa entre un componente y un control: los controles tienen una interfaz de usuario. Todos los controles también son componentes, pero no todos los componentes son controles. Si necesita mostrar una interfaz de usuario, generalmente se requeriría derivar de algún tipo de base de Control (Control, UserControl, Formulario, etc.). Si solo tiene un comportamiento, como con el componente BackgroundWorker, entonces solo debería derivar de Component directamente.

Otra nota ... tanto los componentes como los controles pueden soltarse en una superficie de diseño. Los componentes aparecen como un ícono y una etiqueta en un área especial; los controles aparecen directamente en la superficie de diseño. Sin embargo, hay una tercera cosa que puedes usar: una Clase simple. Si no necesita soporte de superficie de diseño, le recomendaría usar una clase simple en lugar de Componente o Control. Son más livianos y menos hinchados cuando todo lo que necesitas es un comportamiento 100% puro sin soporte en tiempo de diseño.

Cuestiones relacionadas