Partilhar via


Controles com suporte Built-In Owner-Drawing

O desenho do proprietário no Windows Forms, que também é conhecido como desenho personalizado, é uma técnica para alterar a aparência visual de determinados controles.

Observação

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

Normalmente, o Windows gere o processo de desenho automaticamente usando propriedades como o BackColor para determinar a aparência de um controlo. Com o desenho do proprietário, você assume o processo de pintura, alterando elementos de aparência que não estão disponíveis usando propriedades. Por exemplo, muitos controles permitem definir a cor do texto exibido, mas você está limitado a uma única cor. O desenho do proprietário permite que você faça coisas como exibir parte do texto em preto e parte em vermelho.

Na prática, o desenho do proprietário é semelhante ao desenho gráfico em um formulário. Por exemplo, você poderia usar métodos gráficos em um manipulador para o evento Paint do formulário para emular um controle ListBox, mas você teria que escrever seu próprio código para manipular toda a interação do usuário. Com o desenho do proprietário, o controle usa seu código para desenhar seu conteúdo, mas mantém todas as suas capacidades intrínsecas. Você pode usar métodos gráficos para desenhar cada item no controle ou para personalizar alguns aspetos de cada item enquanto usa a aparência padrão para outros aspetos de cada item.

Desenho personalizado em controlos do Windows Forms

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

A maioria dos controles que suportam desenho personalizado tem uma propriedade OwnerDraw ou DrawMode que indica se o controle gerará seu evento ou eventos relacionados ao desenho quando se desenhar.

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

Existem muitos tipos diferentes de eventos de desenho, mas um evento de desenho típico ocorre para desenhar um único item dentro de um controle. O manipulador de eventos recebe um objeto EventArgs que contém informações sobre o item que está sendo desenhado e as ferramentas que você pode usar para desenhá-lo. Por exemplo, este objeto normalmente contém o número de índice do elemento na sua coleção-mãe, um Rectangle que indica os limites de exibição do item e um objeto Graphics para chamar métodos de desenho. Para alguns eventos, o objeto EventArgs fornece informações adicionais sobre o item e os métodos que você pode chamar para pintar alguns aspetos do item por padrão, como o plano de fundo ou um retângulo de foco.

Para criar um controle reutilizável que contenha suas personalizações desenhadas pelo proprietário, crie uma nova classe que derive de uma classe de controle que ofereça suporte ao desenho do proprietário. Em vez de manipular eventos de desenho, inclua o seu código de desenho personalizado nas substituições para o(s) método(s) On EventName apropriado(s) na nova classe. Certifique-se de chamar a classe base OnEventName método ou métodos nesse caso para que os usuários do seu controle possam manipular eventos de desenho do proprietário e fornecer personalização adicional.

Os seguintes controlos do Windows Forms oferecem suporte ao desenho personalizado em todas as versões do .NET Framework:

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

Os seguintes controles 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 ListBox e ComboBox

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

Observação

Embora o controlo CheckedListBox seja derivado do controlo ListBox, ele não suporta desenho proprietário.

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

Para desenhar cada item usando um tamanho diferente, defina a propriedade DrawMode como OwnerDrawVariable e manipular os eventos MeasureItem e DrawItem. O evento MeasureItem permite indicar o tamanho de um item antes que o evento DrawItem ocorra para esse item.

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

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

Para desenhar um MenuItem, defina a sua propriedade OwnerDraw como true e manipule o seu evento DrawItem. Para personalizar o tamanho do item de menu antes que o evento DrawItem ocorra, manipule o evento MeasureItem do item.

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

Controlo TabControl

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

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

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

Componente Dica de ferramenta

O componente ToolTip permite desenhar toda a dica de ferramenta quando ela é exibida.

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

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

Controle ListView

O controle ListView permite desenhar itens individuais, subitens e cabeçalhos de coluna no controle.

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

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

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

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

Controle TreeView

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

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

Para desenhar todos os elementos de cada nó, defina a propriedade DrawMode como OwnerDrawAll e manipule o evento DrawNode 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 de DataGridView

O controle DataGridView permite desenhar células e linhas individuais no controle.

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

Para desenhar linhas individuais ou elementos de linhas, manipule um ou ambos os eventos RowPrePaint e RowPostPaint. O evento RowPrePaint ocorre antes que as células em uma linha sejam pintadas e o evento RowPostPaint ocorre depois que as células são pintadas. Você pode manipular eventos e o evento CellPainting para pintar o plano de fundo da linha, as células individuais e o primeiro plano da linha separadamente, ou pode fornecer personalizações específicas onde precisar delas e usar 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:

Controlo de ToolStrip

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

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

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

Ver também