Controles com suporte para desenho do proprietário interno

Proprietário do desenho nos Windows Forms, que é também conhecido como desenho personalizado, é uma técnica para alterar a aparência visual de certos controles.

Observação

A palavra "controle" neste tópico é usada para significar classes que derivam de um Control ou Component.

Normalmente, o Windows manipula a pintura automaticamente usando configurações de propriedade, como BackColor para determinar a aparência de um controle. Com o desenho do proprietário, assumir o processo de pintura, alterando os elementos que não estão disponíveis usando propriedades de aparência. Por exemplo, muitos controles permitem que você defina a cor do texto que é exibido, mas você está limitado a uma única cor. Desenho do proprietário permite que você faça coisas como parte do texto de exibição em preto e parte em vermelho.

Na prática, o desenho do proprietário é semelhante ao desenho de gráficos em um formulário. Por exemplo, você poderia usar métodos gráficos em um manipulador para o evento do formulário para emular um ListBox controle, mas você teria que escrever seu próprio código para lidar com toda a interação do Paint usuário. Com o desenho do proprietário, o controle usa seu código para desenhar seu conteúdo, mas caso contrário retém todos os seus recursos intrínsecos. Você pode usar métodos gráficos para desenhar cada item no controle ou personalizar alguns aspectos de cada item enquanto você usa a aparência padrão para outros aspectos de cada item.

Desenho do proprietário no Controle dos Windows Forms

Para executar o desenho do proprietário na controles que oferecem suporte a ele, você normalmente define uma propriedade e manipular um ou mais eventos.

A maioria dos controles têm de desenho do proprietário que suporte uma propriedade OwnerDraw ou DrawMode que indica se o controle será aumentará seu evento ou eventos de desenho quando ela pinta a si mesma.

Controles que não têm uma propriedade OwnerDraw ou DrawMode, incluem o DataGridView controle, que fornece eventos de desenho que ocorrem automaticamente e o ToolStrip controle, que é desenhado usando uma classe de renderização externa que tem seus próprios eventos relacionados ao desenho.

Há muitos tipos diferentes de eventos de desenho, mas ocorre um evento típico de desenho para desenhar um único item em um controle. O manipulador de eventos recebe um EventArgs objeto que contém informações sobre o item que está sendo desenhado e ferramentas que você pode usar para desenhá-lo. Por exemplo, esse objeto normalmente contém o número de índice do item dentro de sua coleção pai, um que indica os limites de exibição do item e um RectangleGraphics objeto para chamar métodos de pintura. Em alguns casos, o EventArgs objeto fornece informações adicionais sobre o item e os métodos que você pode chamar para pintar alguns aspectos do item por padrão, como a tela de fundo ou um retângulo de foco.

Para criar um controle reutilizável que contém as personalizações desenhados pelo proprietário, crie uma nova classe que deriva de uma classe de controle que dá suporte ao desenho do proprietário. Em vez de manipular eventos de desenho, incluir o código de desenho do proprietário em substituições de método ou métodos apropriados de OnEventName na nova classe. Certifique-se de que você chamar o método ou métodos da classe base OnEventName nesse caso, para que os usuários de seu controle possam manipular eventos de desenho do proprietário e fornecer personalização adicional.

O Windows Forms a seguir controla desenho do proprietário em todas as versões do .NET Framework:

Os controles a seguir oferecem suporte ao desenho do proprietário somente no .NET Framework 2.0:

Os controles a seguir oferecem suporte ao desenho do proprietário e são novos no .NET Framework 2.0:

As seções a seguir fornecem detalhes adicionais para cada um desses controles.

Controles de Caixa de Combinação e Caixa de listagem

Os ListBox controles e ComboBox permitem que você desenhe itens individuais no controle em um único tamanho ou em tamanhos variados.

Observação

Embora o CheckedListBox controle seja derivado do controle, ele não oferece suporte ao ListBox desenho do proprietário.

Para desenhar cada item do mesmo tamanho, defina a DrawMode propriedade como OwnerDrawFixed e manipule o DrawItem evento.

Para desenhar cada item usando um tamanho diferente, defina a DrawMode propriedade e OwnerDrawVariable manipule os MeasureItem eventos e DrawItem . O evento MeasureItem permite indicar o tamanho de um item antes do evento DrawItem ocorrer para aquele item.

Para obter mais informações, incluindo exemplos de código, consulte os seguintes tópicos:

O MenuItem componente representa um único item de menu em um MainMenu ou ContextMenu componente.

Para desenhar um MenuItem, defina sua OwnerDraw propriedade como true e manipule seu DrawItem evento. Para personalizar o tamanho do item de menu antes do evento DrawItem ocorrer, identifique os eventos MeasureItem do item.

Para obter mais informações, incluindo exemplos de código, consulte os seguintes tópicos de referência:

Controle TabControl

O TabControl controle permite que você desenhe guias individuais no controle. O desenho do proprietário afeta apenas as guias; O TabPage conteúdo não é afetado.

Para desenhar cada guia em um TabControl, defina a DrawMode propriedade como OwnerDrawFixed e manipule o DrawItem evento. Esse evento ocorre uma vez para cada guia somente quando a guia estiver visível no controle.

Para obter mais informações, incluindo exemplos de código, consulte os seguintes tópicos de referência:

Componente ToolTip

O ToolTip componente permite que você desenhe a dica de ferramenta inteira quando ela for exibida.

Para desenhar um ToolTip, defina sua OwnerDraw propriedade como true e manipule seu Draw evento. Para personalizar o tamanho do antes que o evento ocorra, manipule o PopupDraw evento e defina a ToolTipSize propriedade no manipulador de ToolTip eventos.

Para obter mais informações, incluindo exemplos de código, consulte os seguintes tópicos de referência:

Controle ListView

O ListView controle permite que você desenhe itens individuais, subitens e cabeçalhos de coluna no controle.

Para habilitar o controle de desenho do proprietário, defina a propriedade OwnerDraw para true.

Para desenhar cada item no controle, identifique o evento DrawItem.

Para desenhar cada subitem ou cabeçalho de coluna no controle quando a View propriedade é definida como Details, manipule os DrawSubItem eventos e DrawColumnHeader .

Para obter mais informações, incluindo exemplos de código, consulte os seguintes tópicos de referência:

Controle TreeView

O TreeView controle permite que você desenhe nós individuais no controle.

Para desenhar somente o texto exibido em cada nó, defina a DrawMode propriedade como OwnerDrawText e manipule o evento para desenhar o DrawNode texto.

Para desenhar todos os elementos de cada nó, defina a DrawMode propriedade e OwnerDrawAll manipule o DrawNode evento para desenhar os elementos necessários, como texto, ícones, caixas de seleção, sinais de mais e menos e linhas conectando os nós.

Para obter mais informações, incluindo exemplos de código, consulte os seguintes tópicos de referência:

Controle DataGridView

O DataGridView controle permite que você desenhe células e linhas individuais no controle.

Para desenhar células individuais, identifique o evento CellPainting.

Para desenhar linhas individuais ou elementos de linhas, identifique um ou ambos os eventos RowPrePaint e RowPostPaint. O evento RowPrePaint ocorre antes das células em uma linha serem pintadas e o evento RowPostPaint ocorre depois que as células são pintadas. Você pode identificar ambos os eventos e o evento CellPainting para pintar a tela de fundo de linha, células individuais e primeiro plano linha separadamente ou você pode fornecer personalizações específicas em que você precisa deles e use a exibição padrão para outros elementos da linha.

Para obter mais informações, incluindo exemplos de código, consulte os seguintes tópicos:

Controle ToolStrip

ToolStrip e os controles derivados permitem que você personalize qualquer aspecto de sua aparência.

Para fornecer renderização personalizada para controles, defina a Renderer propriedade de um , ToolStripManager, ToolStripPanelou para ToolStrip um objeto e manipule um ToolStripToolStripRenderer ou ToolStripContentPanel mais dos muitos eventos de desenho fornecidos pela ToolStripRenderer classe. Como alternativa, defina uma propriedade para uma Renderer instância de sua própria classe derivada de ToolStripRenderer, ToolStripProfessionalRendererou que implementa ou ToolStripSystemRenderer substitui métodos EventName específicosOn.

Para obter mais informações, incluindo exemplos de código, consulte os seguintes tópicos:

Confira também