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

81

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

Svish
fuente

Respuestas:

162

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 interfaz de usuario (como componentes de temporizador, fuentes de datos, ...)
  • Cree un control personalizado si desea crear un componente en el que tenga control total sobre su apariencia visual y no desee 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).
Fredrik Mörk
fuente
16
Sí, me tomó un tiempo darme cuenta, pero parece que en UserControlrealidad es un control "compuesto" (un control hecho de otros controles), mientras que un control personalizado es realmente un control diseñado por el usuario.
Dave Cousineau
Si desea crear un control que consta de varios TextBoxes con gráficos personalizados y dibujados dinámicamente entre ellos, ¿debería elegir UserControl?
Nick Alexeev
@NickAlexeev No he trabajado mucho en el mundo de winforms desde hace unos años, pero creo que ese sería el camino a seguir, sí.
Fredrik Mörk
2
@ FredrikMörk ¡Buena respuesta! ¿Podría sugerir un sitio donde podamos aprender a crear controles personalizados?
John Odom
1
La serie de @John Odom AngelSix en youtube es la indicada. Lo verifiqué y sé que está en el video 9 y, para ser específico, lo usó a las 26:00
Mour_Ka
2

Además de lo que dijo Fredrik, generalmente se usarían componentes y controles personalizados cuando planee reutilizarlos en todos los proyectos. Use los controles de usuario cuando solo los usaría en un proyecto.

Chad Yeates
fuente
10
¿Porque? ¿Un beneficio de utilizar un control de usuario en un solo proyecto, una limitación del mismo para ser utilizado en varios proyectos ...?
Camilo Martin
1

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

La razón principal es que si, por ejemplo, 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. Además, esta biblioteca de clases se puede utilizar varias veces.

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

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

Entonces, si hago referencia a esto en otro proyecto, esos cambios también aparecerán en el nuevo proyecto.

Además, no utiliza 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 ... Entonces, el propósito de control de usuario no es solo para un proyecto. No tiene limitaciones al respecto. jeff

Robopro
fuente
Re "Creo que la última declaración no es correcta en mi opinión" - ¿la última declaración de qué ? [Y sería mejor citar la declaración en su respuesta, para que los lectores sepan inmediatamente a qué se refiere]
ToolmakerSteve
-5

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

Himanshu Namdeo
fuente
7
La pregunta era sobre WinForms, no ASP.NET.
Qwertie