Controles compatibles con dibujos propietarios integrados

Los dibujos propietarios en formularios Windows Forms, que también se conocen como dibujos personalizados, es una técnica para cambiar la apariencia visual de determinados controles.

Nota:

La palabra "control" de este tema se utiliza para referirse a las clases que se derivan de Control o Component.

Normalmente, Windows controla el dibujo automático mediante la configuración de la propiedad como BackColor para determinar la apariencia de un control. Con el dibujo del propietario, toma el control sobre el proceso de dibujo, con lo que puede cambiar los elementos de apariencia que no están disponibles mediante las propiedades. Por ejemplo, muchos controles le permiten establecer el color del texto que se muestra, pero está limitado a un único color. El dibujo del propietario le permite realizar tareas como mostrar una parte del texto en negro y otra en rojo.

En la práctica, el dibujo del propietario es similar a dibujar gráficos en un formulario. Por ejemplo, podría utilizar métodos gráficos en un controlador para el evento Paint del formulario con el fin de emular un control ListBox, pero tendría que escribir su propio código para controlar toda la interacción del usuario. Con el dibujo del propietario, el control utiliza su código para dibujar el contenido, pero por lo demás conserva todas sus funciones intrínsecas. Puede utilizar métodos gráficos para dibujar cada elemento en el control o personalizar algunos aspectos de cada elemento mientras utiliza la apariencia predeterminada para otros aspectos de cada elemento.

Dibujo del propietario en controles de formularios Windows Forms

Para realizar el dibujo propietario en controles compatibles, normalmente establece una propiedad y controla uno o más eventos.

La mayoría de los controles que admiten el dibujo del propietario tienen una propiedad OwnerDraw o DrawMode que indica si el control generará eventos relacionados con el dibujo cuando se pinta a sí mismo.

Los controles que no tienen una propiedad OwnerDraw o DrawMode incluyen el control DataGridView, que proporciona eventos de dibujo que se producen automáticamente, y el control ToolStrip, que se dibuja utilizando una clase de representación externa que tiene sus propios eventos relacionados con el dibujo.

Hay muchos tipos diferentes de eventos de dibujo, pero se produce un evento de dibujo típico con el fin de dibujar un solo elemento dentro de un control. El controlador de eventos recibe un objeto EventArgs que contiene información sobre el elemento que se va a dibujar y herramientas que puede utilizar para dibujarlo. Por ejemplo, este objeto contiene normalmente el número de índice del elemento en la colección primaria, una propiedad Rectangle que indica los límites de visualización del elemento, y un objeto Graphics para llamar a métodos de pintura. En algunos eventos, el objeto EventArgs proporciona información adicional sobre el elemento y los métodos que puede llamar para dibujar algunos aspectos del elemento de forma predeterminada, como el fondo o un rectángulo de enfoque.

Para crear un control reutilizable que contenga sus personalizaciones para dibujo del propietario, cree una nueva clase que derive de una clase de control que admita el dibujo del propietario. En lugar de controlar eventos de dibujo, incluya el código de dibujo del propietario en invalidaciones para el método o los métodos OnEventName de la clase nueva. Asegúrese de llamar al método o los métodos OnEventName de la clase base en este caso para que los usuarios de su control puedan controlar eventos del dibujo del propietario y proporcionar una personalización adicional.

Los siguientes controles de formularios Windows Forms son compatibles con el dibujo del propietario en todas las versiones de .NET Framework:

Los controles siguientes son compatibles solamente con el dibujo del propietario en .NET Framework 2.0:

Los controles siguientes son compatibles con el dibujo del propietario y son nuevos en .NET Framework 2.0:

Las secciones siguientes ofrecen detalles adicionales para cada uno de estos controles.

Controles ListBox y ComboBox

Los controles ListBox y ComboBox le permiten dibujar elementos individuales en el control, ya sea en un solo tamaño o en diferentes tamaños.

Nota:

Aunque el control CheckedListBox se deriva del control ListBox, no admite el modo dibujado por el propietario.

Para dibujar cada elemento del mismo tamaño, establezca la propiedad DrawMode en OwnerDrawFixed y controle el evento DrawItem.

Para dibujar cada elemento con un tamaño distinto, establezca la propiedad DrawMode en OwnerDrawVariable y controle los eventos MeasureItem y DrawItem. El evento MeasureItem le permite indicar el tamaño de un elemento antes de que se produzca el evento DrawItem para ese elemento.

Para obtener más información, incluidos los ejemplos de código, consulte los temas siguientes:

El componente MenuItem representa un solo elemento del menú en un componente MainMenu o ContextMenu.

Para dibujar un elemento MenuItem, establezca su propiedad OwnerDraw en true y controle su evento DrawItem. Para personalizar el tamaño del elemento de menú antes de que se produzca el evento DrawItem, controle el evento MeasureItem del elemento.

Para obtener más información, incluidos los ejemplos de código, consulte los temas de consulta siguientes:

TabControl (Control)

El control TabControl permite dibujar pestañas individuales en el control. El modo dibujado por el propietario afecta solo a las pestañas, no al contenido de TabPage.

Para dibujar cada pestaña en TabControl, establezca la propiedad DrawMode en OwnerDrawFixed y controle el evento DrawItem. Este evento se produce una vez para cada pestaña solo cuando la pestaña está visible en el control.

Para obtener más información, incluidos los ejemplos de código, consulte los temas de consulta siguientes:

ToolTip

El componente ToolTip permite dibujar la información sobre herramientas completa cuando se muestra.

Para dibujar un elemento ToolTip, establezca su propiedad OwnerDraw en true y controle su evento Draw. Para personalizar el tamaño de ToolTip antes de que ocurra el evento Draw, controle el evento Popup y establezca la propiedad ToolTipSize en el controlador de eventos.

Para obtener más información, incluidos los ejemplos de código, consulte los temas de consulta siguientes:

Control ListView

El control ListView le permite dibujar elementos individuales, subelementos y encabezados de columna en el control.

Para habilitar el dibujo propietario en el control, establezca la propiedad OwnerDraw en true.

Para dibujar cada elemento en el control, controle el evento DrawItem.

Para dibujar cada subelemento o encabezado de columna en el control cuando la propiedad View se establece en Details, controle los eventos DrawSubItem y DrawColumnHeader.

Para obtener más información, incluidos los ejemplos de código, consulte los temas de consulta siguientes:

TreeView (Control)

El control TreeView permite dibujar nodos individuales en el control.

Para dibujar solo el texto mostrado en cada nodo, establezca la propiedad DrawMode en OwnerDrawText y controle el evento DrawNode para dibujar el texto.

Para dibujar todos los elementos de cada nodo, establezca la propiedad DrawMode en OwnerDrawAll y controle el evento DrawNode para dibujar cualquier elemento que necesite, como texto, iconos, casillas, signos más y menos y líneas que conectan los nodos.

Para obtener más información, incluidos los ejemplos de código, consulte los temas de consulta siguientes:

Control DataGridView

El control DataGridView permite dibujar celdas y filas individuales en el control.

Para dibujar celdas individuales, controle el evento CellPainting.

Para dibujar filas o elementos de filas, controle uno o ambos eventos RowPrePaint y RowPostPaint. El evento RowPrePaint se produce antes de que se dibujen las celdas en una fila, y el evento RowPostPaint se produce después de dibujar las celdas. Puede controlar ambos eventos y el evento CellPainting para pintar el fondo de una fila, celdas individuales y el primer plano de una fila por separado, o bien puede proporcionar personalizaciones específicas donde las necesite y usar la vista predeterminada para otros elementos de la fila.

Para obtener más información, incluidos los ejemplos de código, consulte los temas siguientes:

ToolStrip

ToolStrip y los controles derivados le permiten personalizar cualquier aspecto de su apariencia.

Para proporcionar una representación personalizada para los controles ToolStrip, establezca la propiedad Renderer de ToolStrip, ToolStripManager, ToolStripPanel, o ToolStripContentPanel en un objeto ToolStripRenderer y controle uno o más de los muchos eventos de dibujo proporcionados por la clase ToolStripRenderer. Alternativamente, establezca una propiedad Renderer en una instancia de su propia clase derivada de ToolStripRenderer, ToolStripProfessionalRenderer, o ToolStripSystemRenderer que implemente o sobrescriba métodos específicos OnEventName.

Para obtener más información, incluidos los ejemplos de código, consulte los temas siguientes:

Consulte también