Controles compatibles con dibujos propietarios integrados
Actualización: noviembre 2007
La característica de dibujo propietario de formularios Windows Forms, que también se conoce como dibujo personalizado, es una técnica para cambiar la apariencia visual de determinados controles.
Nota: |
---|
La palabra "control" se utiliza en este tema con el significado de clases que derivan de Control o Component. |
Normalmente, Windows controla el dibujo automático utilizando valores de propiedades como BackColor para determinar la apariencia de un control. Con dibujos propietarios, el usuario se hace cargo del proceso de dibujo, cambia elementos con una apariencia que no está disponible mediante propiedades. Por ejemplo, muchos controles permiten establecer el color del texto que se muestra, pero se limita a un color único. El dibujo propietario permite realizar tareas como mostrar una parte del texto en negro y otra en rojo.
En la práctica, el dibujo propietario es similar a dibujar gráficos en un formulario. Por ejemplo, podría utilizar métodos gráficos en un controlador para que el evento Paint del formulario emule un control ListBox, pero tendría que escribir su propio código para controlar toda la interacción del usuario. Con el dibujo propietario, el control utiliza su código para dibujar el contenido pero por lo demás retiene todas sus funciones intrínsecas. Puede utilizar métodos gráficos para dibujar cada elemento del control o para personalizar algunos aspectos de cada elemento a la vez que utiliza la apariencia predeterminada para otros aspectos de cada elemento.
Dibujo propietario en controles de formularios Windows Forms
Para realizar el dibujo propietario en controles que lo admiten, normalmente establecerá una propiedad y controlará uno o más eventos.
La mayoría de controles que admiten el dibujo propietario tienen una propiedad OwnerDraw o DrawMode que indica si el control provocará el evento o los eventos relacionados con el dibujo cuando se dibuje 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 distintos 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 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 suele contener el número de índice del elemento dentro de su colección primaria, un Rectangle que indica los límites de presentación del elemento y un objeto Graphics para llamar a los métodos de dibujo. Para algunos eventos, el objeto EventArgs proporciona información adicional sobre el elemento y métodos a los que puede llamar para dibujar algunos aspectos del elemento de forma predeterminada, como el fondo o un rectángulo de foco.
Para crear un control reutilizable que contiene sus personalizaciones de dibujo propietario, cree una nueva clase que deriva de una clase de control que admite el dibujo propietario. En lugar de controlar eventos de dibujo, incluya el código de dibujo propietario en invalidaciones del método o métodos OnnombreDeEvento apropiados de la nueva clase. Asegúrese de que en este caso llama al método o métodos OnnombreDeEvento de la clase base, de modo que los usuarios del control puedan controlar los eventos de dibujo propietario y proporcionar una personalización adicional.
Los controles de formularios Windows Forms siguientes admiten el dibujo propietario en todas las versiones de .NET Framework:
MenuItem (lo utilizan MainMenu y ContextMenu)
Los controles siguientes admiten el dibujo propietario sólo en .NET Framework versión 2.0:
Los controles siguientes admiten el dibujo propietario y son nuevos en .NET Framework versión 2.0:
Las secciones siguientes proporcionan detalles adicionales para cada uno de estos controles.
Controles ListBox y ComboBox
Los controles ListBox y ComboBox permiten dibujar elementos individuales en el control todos del mismo tamaño o con tamaños variables.
Nota: |
---|
Aunque el control CheckedListBox se deriva del control ListBox, no admite el dibujo propietario. |
Para dibujar todos los elementos con el 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 permite indicar el tamaño de un elemento antes de que se produzca el evento DrawItem de ese elemento.
Para obtener más información, incluidos los ejemplos de código, vea los siguientes temas:
Componente MenuItem
El componente MenuItem representa un elemento de menú único de un componente MainMenu o ContextMenu.
Para dibujar un MenuItem, establezca su propiedad OwnerDraw en true y controle el 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, vea los siguientes temas de referencia:
Control TabControl
El control TabControl permite dibujar fichas individuales en el control. El dibujo propietario afecta sólo a las fichas; no afecta al contenido de TabPage.
Para dibujar cada ficha de un TabControl, establezca la propiedad DrawMode en OwnerDrawFixed y controle el evento DrawItem. Este evento aparece una vez para cada ficha sólo cuando la ficha está visible en el control.
Para obtener más información, incluidos los ejemplos de código, vea los siguientes temas de referencia:
Componente ToolTip
El componente ToolTip permite dibujar información sobre herramientas completa cuando se muestra.
Para dibujar un ToolTip, establezca su propiedad OwnerDraw en true y controle el evento Draw. Para personalizar el tamaño del ToolTip antes de que se produzca el evento Draw, controle el evento Popup y establezca la propiedad ToolTipSize del controlador de eventos.
Para obtener más información, incluidos los ejemplos de código, vea los siguientes temas de referencia:
Control ListView
El control ListView 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 está establecida en Details, controle los eventos DrawSubItem y DrawColumnHeader.
Para obtener más información, incluidos los ejemplos de código, vea los siguientes temas de referencia:
Control TreeView
El control TreeView permite dibujar nodos individuales en el control.
Para dibujar sólo 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, vea los siguientes temas de referencia:
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 individuales, controle uno o los dos eventos RowPrePaint y RowPostPaint. Se produce el evento RowPrePaint antes de que se dibujen las celdas de una fila y el evento RowPostPaint después de que se dibujan las celdas. Puede controlar los dos eventos y el evento CellPainting para dibujar el fondo de la fila, celdas individuales y filas en primer plano por separado o puede proporcionar personalizaciones concretas cuando las necesite y utilizar la presentación predeterminada de otros elementos de la fila.
Para obtener más información, incluidos los ejemplos de código, vea los siguientes temas:
Control ToolStrip
ToolStrip y los controles derivados le permiten personalizar cualquier aspecto de su apariencia.
Para proporcionar una representación personalizada para controles ToolStrip, establezca la propiedad Renderer de un objeto ToolStrip, ToolStripManager, ToolStripPanel o ToolStripContentPanel en un objeto ToolStripRenderer y controle uno o más de los diversos eventos de dibujo proporcionados por la clase ToolStripRenderer. Si lo desea, puede establecer también una propiedad Renderer en una instancia de su propia clase derivada de ToolStripRenderer, ToolStripProfessionalRenderer o ToolStripSystemRenderer que implementa o invalida métodos OnnombreDeEvento concretos.
Para obtener más información, incluidos los ejemplos de código, vea los siguientes temas: