Variedades de controles personalizados

.NET Framework permite desarrollar e implementar nuevos controles. Puede extender la funcionalidad del control de usuario ya conocida, así como de los controles existentes, mediante la herencia. También puede escribir controles personalizados que realicen su propia representación.

Decidir qué tipo de control va a crear puede resultar confuso. En este tema se destacan las diferencias entre los distintos tipos de controles de los que puede heredar, y proporciona información sobre cómo elegir un tipo de control determinado para el proyecto.

Nota

Para obtener información sobre cómo crear un control para usarlo en formularios Web Forms, consulte Desarrollar controles de servidor de ASP.NET.

Clase base de Control

Control es la clase base para los controles de Windows Forms. Proporciona la infraestructura necesaria para la presentación visual en aplicaciones de Windows Forms.

La clase Control realiza las tareas siguientes para proporcionar presentaciones visuales en aplicaciones de Windows Forms:

  • Expone un identificador de ventana.

  • Administra el enrutamiento de los mensajes.

  • Proporciona eventos de teclado y mouse, y muchos otros eventos de interfaz de usuario.

  • Proporciona características de diseño avanzadas.

  • Contiene muchas propiedades específicas de la presentación visual, como ForeColor, BackColor, Height y Width.

  • Proporciona la seguridad y la compatibilidad para subprocesos necesarias para un control de Windows Forms que actúa como un control de Microsoft® ActiveX®.

Dado que la clase base proporciona gran parte de la infraestructura, es relativamente fácil desarrollar sus propios controles de Windows Forms.

Tipos de controles

Windows Forms admite tres tipos de controles definidos por el usuario: compuestos, extendidos y personalizados. En las secciones siguientes se describe cada tipo de control y se ofrecen recomendaciones para elegir el tipo para utilizar en los proyectos.

Controles compuestos

Un control compuesto es una colección de controles de Windows Forms encapsulados en un contenedor común. Este tipo de control se denomina a veces control de usuario. Los controles contenidos se denominan controles constituyentes.

El control compuesto conserva toda la funcionalidad inherente asociada a cada uno de los controles de Windows Forms contenidos, y permite exponer y enlazar sus propiedades de forma selectiva. Un control compuesto también proporciona gran parte de la funcionalidad predeterminada del teclado sin ningún esfuerzo de desarrollo adicional por su parte.

Un ejemplo de un control compuesto podría ser un control creado para mostrar los datos de dirección de los clientes de una base de datos. Este control podría incluir un control DataGridView para mostrar los campos de la base de datos, BindingSource para controlar el enlace a un origen de datos y un control BindingNavigator para desplazarse por los registros. Las propiedades de enlace de datos se podrían exponer de forma selectiva, y el control completo se podría empaquetar y reutilizar en distintas aplicaciones. Para obtener un ejemplo de este tipo de control compuesto, consulte Cómo: Aplicar atributos en controles de formularios Windows Forms.

Para crear un control compuesto, derive de la clase UserControl. La clase base UserControl proporciona el enrutamiento de teclado para los controles secundarios y permite que estos funcionen como un grupo. Para obtener más información, vea Desarrollar un control de formularios Windows Forms compuesto.

Recomendación

Herede de la clase UserControl si:

  • Quiere combinar la funcionalidad de varios controles de Windows Forms en una sola unidad reutilizable.

Controles extendidos

Puede derivar un control heredado de cualquier control de Windows Forms existente. Este enfoque permite conservar toda la funcionalidad inherente de un control de Windows Forms y, después, ampliarla agregando propiedades, métodos u otras características personalizadas. Con esta opción, puede invalidar la lógica de dibujo del control base y, a continuación, cambiar la apariencia de la interfaz de usuario para extenderla.

Por ejemplo, puede crear un control derivado de Button que realiza el seguimiento de cuántas veces un usuario ha hecho clic en él.

En algunos controles, también puede agregar una apariencia personalizada a la interfaz gráfica del control si invalida el método OnPaint de la clase base. Para un botón extendido que realiza el seguimiento de los clics, puede invalidar el método OnPaint para llamar a la implementación base de OnPaint y, después, dibujar el recuento de clics en una esquina del área cliente del control Button.

Recomendación

Herede de un control de Windows Forms si:

  • La mayor parte de la funcionalidad que necesita es idéntica a la de un control de Windows Forms existente.

  • No necesita una interfaz gráfica de usuario personalizada o quiere diseñar una nueva interfaz gráfica de usuario para un control existente.

Controles personalizados

Otra forma de crear un control consiste en hacerlo prácticamente desde el principio si se hereda de Control. La clase Control proporciona toda la funcionalidad básica necesaria para los controles, incluido el control de eventos del mouse y el teclado, pero ninguna funcionalidad específica del control ni la interfaz gráfica.

Para crear un control mediante la herencia de la clase Control se necesita mucho más esfuerzo que heredar de una instancia de UserControl o de un control de Windows Forms existente. Como puede realizar gran parte de la implementación, el control puede tener mayor flexibilidad que un control compuesto o ampliado, y puede personalizar el control exactamente para sus necesidades.

Para implementar un control personalizado, debe escribir código para el evento OnPaint del control, así como cualquier código específico de la característica que se necesite. También puede invalidar el método WndProc y controlar los mensajes de Windows directamente. Esta es la manera más eficaz de crear un control, pero para utilizar esta técnica de forma eficaz, debe estar familiarizado con la API Win32 de Microsoft®.

Un ejemplo de un control personalizado es un control de reloj que reproduce la apariencia y el funcionamiento de un reloj analógico. Se invoca la representación personalizada para hacer que las manecillas del reloj se muevan en respuesta a los eventos Tick de un componente Timer interno. Para obtener más información, vea Cómo: Desarrollar un control de formularios Windows Forms sencillo.

Recomendación

Herede de la clase Control si:

  • Quiere proporcionar una representación gráfica personalizada del control.

  • Necesita implementar funcionalidad personalizada que no está disponible en los controles estándar.

Controles ActiveX

Aunque la infraestructura de Windows Forms se han optimizado para hospedar controles de Windows Forms, todavía puede utilizar los controles ActiveX. Visual Studio es compatible con esta tarea. Para obtener más información, consulte Cómo: Agregar controles de Windows Forms a documentos de Office.

Controles sin ventana

Las tecnologías de Microsoft Visual Basic® 6.0 y ActiveX admiten controles sin ventanas. Los controles sin ventana no se admiten en Windows Forms.

Experiencia de diseño personalizada

Si necesita implementar una experiencia personalizada en tiempo de diseño, puede crear su propio diseñador. En el caso de los controles compuestos, derive la clase de diseñador personalizada de las clases ParentControlDesigner o DocumentDesigner. En el caso de los controles extendidos y personalizados, derive la clase de diseñador personalizada de la clase ControlDesigner.

Use DesignerAttribute para asociar el control al diseñador. Para obtener más información, consulte Ampliar compatibilidad en tiempo de diseño y Cómo: Crear un control de formularios Windows Forms que aproveche las características en tiempo de diseño.

Consulte también