Share via


Controles desenhada por usuário

O .NET estrutura fornece a capacidade de desenvolver com com facilidade seus próprios controles.Você pode criar um controle de usuário, que é um conjunto de controles padrão vinculados juntos por código, ou você pode criar seu próprio controle de ponta a ponta até.Você ainda pode usar a herança para criar um controle que herda de um controle existente e adicionar a sua funcionalidade inerente.Qualquer abordagem usar, o .NET estrutura fornece a funcionalidade para desenhar uma interface gráfica personalizada para qualquer controle que você criar.

Pintura de um controle é feita por meio da execução do código do controle OnPaint método. O único argumento do OnPaint método é um PaintEventArgs objeto que fornece todas as informações e a funcionalidade necessária para processar seu controle. The PaintEventArgs fornece dois objetos principais que serão usados no renderização do seu controle sistema autônomo propriedades:

  • ClipRectangle objeto - o retângulo que representa a parte do controle será desenhado. Isso pode ser todo o controle ou parte do controle, dependendo de como o controle é desenhado.

  • Graphics objeto - encapsula vários objetos orientados a elementos gráficos e métodos que fornecem a funcionalidade necessária para desenhar seu controle.

Para obter mais informações sobre o Graphics objeto e como usá-lo, consulte Como: Criar objetos de elementos gráficos para desenho.

The OnPaint evento é acionado sempre que o controle é desenhado ou atualizado na tela e o ClipRectangle objeto representa o retângulo na qual a pintura será realizada. Se todo o controle precisa ser atualizado, a ClipRectangle será representam o dimensionar de todo o controle. Se somente a parte das necessidades de controle a ser atualizado, no entanto, a ClipRectangle objeto representará somente a região que precisa ser redesenhados. Um exemplo de nesse caso seria quando um controle foi parcialmente obscurecido por outro controle ou formulário na interface do usuário.

Quando herdam o Control classe, você deve substituir o OnPaint método e fornecer código de renderização de elementos gráficos dentro. Se você desejar fornecer uma interface gráfica personalizada para um controle de usuário ou um controle herdado, você também pode fazer isso substituindo o OnPaint método. Um exemplo é mostrado abaixo:

Protected Overrides Sub OnPaint(ByVal pe As PaintEventArgs)
   ' Call the OnPaint method of the base class.
   MyBase.OnPaint(pe)
      
   ' Declare and instantiate a drawing pen.
   Dim myPen As System.Drawing.Pen = New System.Drawing.Pen(Color.Aqua)
      
   ' Draw an aqua rectangle in the rectangle represented by the control.
   pe.Graphics.DrawRectangle(myPen, New Rectangle(Me.Location, Me.Size))
End Sub
protected override void OnPaint(PaintEventArgs pe)
{
   // Call the OnPaint method of the base class.
   base.OnPaint(pe);

   // Declare and instantiate a new pen.
   System.Drawing.Pen myPen = new System.Drawing.Pen(Color.Aqua);

   // Draw an aqua rectangle in the rectangle represented by the control.
   pe.Graphics.DrawRectangle(myPen, new Rectangle(this.Location, 
      this.Size));
}
protected   void OnPaint(PaintEventArgs pe)
{
   // Call the OnPaint method of the base class.
   super.OnPaint(pe);

   // Declare and instantiate a new pen.
   System.Drawing.Pen myPen =  new System.Drawing.Pen(Color.get_Aqua());

   // Draw an aqua rectangle in the ClipRectangle.
   pe.get_Graphics().DrawRectangle(myPen, pe.get_ClipRectangle());
}

O exemplo anterior demonstra como processar um controle com uma representação gráfica muito simples.Ele chama o OnPaint método da classe base, ele cria um Pen objeto com o qual desenhar e finalmente desenha uma elipse no retângulo é determinado pela Location e Size do controle. Embora grande parte do código renderização sejam significativamente mais complicado do que isso, este exemplo demonstra o uso do Graphics objeto contido dentro de PaintEventArgs objeto. Observe que, se você é Herdar de uma classe que já tem uma representação gráfica, sistema autônomo UserControl ou Buttone não deseja incorporar essa representação em seu renderização, você não deve chamar sua classe base OnPaint método.

O código a OnPaint método do controle será executado quando o controle é desenhado pela primeira vez e sempre que ela for atualizada. Para garantir que o controle é redesenhado toda vez que ele é redimensionado, adicione a seguinte linha para o construtor do seu controle:

SetStyle(ControlStyles.ResizeRedraw, True)
SetStyle(ControlStyles.ResizeRedraw, true);
SetStyle(ControlStyles.ResizeRedraw, true);
Observação:

Use o Control.Region propriedade para implementar um controle não retangular.

Consulte também

Tarefas

Como: Criar objetos de elementos gráficos para desenho

Conceitos

Controles constituintes

Variedades de controles personalizados

Referência

Region

ControlStyles

Graphics

OnPaint

PaintEventArgs