Compartir a través de


Controles con soporte para Built-In Owner-Drawing

El dibujo propietario en Windows Forms, que también se conoce como dibujo personalizado, es una técnica para cambiar el aspecto de ciertos controles.

Nota:

La palabra "control" de este tema se usa para significar clases que derivan de Control o Component.

Normalmente, Windows controla la pintura automáticamente mediante la configuración de propiedades como BackColor para determinar la apariencia de un control. Con el dibujo del propietario, se toma el proceso de pintura, cambiando los elementos de apariencia que no están disponibles mediante propiedades. Por ejemplo, muchos controles permiten establecer el color del texto que se muestra, pero se limita a un solo color. El dibujo del propietario le permite hacer cosas como mostrar parte del texto en negro y parte en rojo.

En la práctica, el dibujo del propietario es similar al dibujo de gráficos en un formulario. Por ejemplo, podría usar métodos gráficos en un controlador para el evento del Paint formulario para emular un ListBox control, 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 tu código para dibujar su contenido, pero conserva todas sus capacidades intrínsecas. Puede usar métodos gráficos para dibujar cada elemento en el control o para personalizar algunos aspectos de cada elemento mientras usa la apariencia predeterminada para otros aspectos de cada elemento.

Dibujo personalizado en controles de Windows Forms

Para realizar el dibujo del propietario en los controles que lo admiten, normalmente establecerá una propiedad y controlará uno o varios eventos.

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

Los controles que no tienen una OwnerDraw propiedad o DrawMode incluyen el DataGridView control , que proporciona eventos de dibujo que se producen automáticamente y el ToolStrip control , que se dibuja mediante 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 para dibujar un solo elemento dentro de un control. El controlador de eventos recibe un EventArgs objeto que contiene información sobre el elemento que se dibuja y las herramientas que se pueden usar para dibujarlo. Por ejemplo, este objeto normalmente contiene el número de índice del elemento dentro de su colección principal, un Rectangle que indica los límites de presentación del elemento y un objeto Graphics para invocar métodos de pintura. Para algunos eventos, el EventArgs objeto proporciona información adicional sobre el elemento y los métodos a los que se puede llamar para pintar algunos aspectos del elemento de forma predeterminada, como el fondo o un rectángulo de foco.

Para crear un control reutilizable que contenga las personalizaciones dibujadas por el 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 personalizado en las sobrescrituras para el método o métodos OnEventName adecuados en la nueva clase. Asegúrese de llamar al método On, o métodos, EventName de la clase base en este caso para que los usuarios del control puedan manejar eventos de dibujo personalizado y proporcionar personalización adicional.

Los siguientes controles de Windows Forms admiten el dibujo de propietario en todas las versiones de .NET Framework:

Los controles siguientes solo admiten el dibujo de propietario en .NET Framework 2.0:

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

En las secciones siguientes se proporcionan detalles adicionales para cada uno de estos controles.

Controles ListBox y ComboBox

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

Nota:

Aunque el CheckedListBox control se deriva del ListBox control , no admite el dibujo del propietario.

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

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

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

El componente MenuItem representa un único elemento de menú en un componente MainMenu o ContextMenu.

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

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

TabControl Control

El TabControl control permite dibujar fichas individuales en el control. El dibujo del propietario afecta solo a las pestañas; el TabPage contenido no se ve afectado.

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 ejemplos de código, consulte los siguientes temas de referencia:

Componente ToolTip

El ToolTip componente permite dibujar el tooltip entero cuando se muestra.

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

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

Control de ListView

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

Para habilitar el dibujo personalizado en el control, establezca la propiedad OwnerDrawtrue.

Para dibujar cada elemento del control, maneje el evento DrawItem.

Para dibujar cada subelemento o encabezado de columna en el control cuando la propiedad View está establecida en Details, maneje los eventos DrawSubItem y DrawColumnHeader.

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

Control de Vista de Árbol

El TreeView control permite dibujar nodos individuales en el control.

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

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

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

DataGridView Control

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

Para dibujar celdas individuales, controle el CellPainting evento.

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

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

Control de Barra de Herramientas

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

Para proporcionar representación personalizada para ToolStrip controles, establezca la propiedad Renderer de un ToolStrip, ToolStripManager, ToolStripPanel o ToolStripContentPanel a un objeto ToolStripRenderer y controle uno o varios de los muchos eventos de dibujo proporcionados por la clase ToolStripRenderer. Como alternativa, establezca una Renderer propiedad en una instancia de su propia clase derivada de ToolStripRenderer, ToolStripProfessionalRenderero ToolStripSystemRenderer que implemente o invalide métodos On específicos.

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

Consulte también