¿Cuál es la diferencia entre Control de usuario, Control personalizado y Componente?

Estas son tres cosas diferentes que puede agregar a un proyecto y no estoy seguro si entiendo la diferencia. Todos parecen, por ejemplo, aparecer en la caja de herramientas del componente cuando trabajan con un Form . ¿Cuáles son algunos escenarios de uso común para cada uno de ellos? ¿Cuál es la diferencia?

La principal diferencia entre Control de usuario, Control personalizado y Componente es que heredan de diferentes niveles en el árbol de herencia:

 MyComponent |-> Component MyCustomControl |-> Control |-> Component MyUserControl |-> ContainerControl |-> ScrollableControl |-> Control |-> Component 

Entonces, en resumen, obtienes una cantidad diferente de funcionalidad precableada con las diferentes opciones.

¿Cuándo usarías las diferentes opciones? (estos son pensamientos y opiniones, no verdades)

  • Cree un componente si desea proporcionar funcionalidad sin UI (como componentes del temporizador, fonts de datos, …)
  • Cree un control personalizado si desea crear un componente donde tenga control total sobre su apariencia visual , y no quiere ningún equipaje de funcionalidad innecesaria. Los casos típicos serían controles simples con funcionalidad limitada (como un botón)
  • Cree un control de usuario si va a combinar los controles existentes en bloques de construcción reutilizables (como dos listas con botones donde puede mover elementos entre las listas).

Esta es una diferencia entre CustomControl y UserControl:

Control personalizado

Un código wrt de control débilmente acoplado y UI

Deriva de Control

Define UI en un ResourceDictionary

La interfaz de usuario es skinable

Tiene un diseño dynamic

La interfaz de usuario se puede cambiar en diferentes proyectos

Tiene soporte completo de caja de herramientas

Define un solo control

Mas flexible

==============

Control de usuario

Un código wrt de control estrechamente acoplado y UI

Deriva de UserControl

Define UI como XAML normal

Los controles secundarios son skinable

Tiene diseño estático

La interfaz de usuario es fija y no puede tener diferentes apariencias en proyectos diferentes

No se puede agregar a la caja de herramientas

Define un conjunto de controles

No es muy flexible como un control personalizado

Agregando a lo que dijo Fredrik, generalmente los componentes y controles personalizados se usarían cuando planee reutilizarlos en los proyectos. Use controles de usuario cuando solo lo esté usando en un proyecto.

Creo que la última statement no es correcta en mi opinión. Creo controles de usuario por muchas razones diferentes.

La razón principal es que, por ejemplo, si diseño una interfaz de múltiples controles agrupados.

Primero creo una biblioteca de clases, luego le agrego controles de usuario. Ahora si necesito cambiar cualquier parte de la lógica detrás de cómo funciona el control de usuario, puedo hacerlo muy fácilmente. También esta biblioteca de clase se puede usar varias veces.

También dentro de la misma biblioteca con clase puedo tener múltiples clases que se pueden compartir y usar para cualquiera de mis controles de usuario.

Esta es la razón principal por la que uso controles de usuario. Y si realiza un cambio en su control de usuario o biblioteca de clases. una vez que construyes el trabajo. el dll actualizará dinámicamente la fecha en la carpeta bin.

Entonces, si estoy haciendo referencia a esto en otro proyecto, esos cambios también aparecerán en un nuevo proyecto.

Tampoco usa las mismas rutinas de pintura que el formulario y todo lo que haya cargado en el formulario.

Entonces los controles de usuario nos dan la capacidad de ser muy modulares y puedo tener múltiples controles de usuario que comparten las clases básicas de la biblioteca de clases … Así que un propósito de control del usuario no es solo para un proyecto. No tiene limitaciones a ese respecto. jeff

La principal diferencia entre ellos: User Control es un archivo de página con extensión .ascx que solo se puede usar en una única aplicación o proyecto. Pero los controles personalizados son ensamblados (archivos dll) que se pueden usar en múltiples aplicaciones.