Controles desenhados pelo usuário
A.NET Framework fornece a capacidade de facilmente desenvolver seus próprios controles. Você pode criar um controle de usuário, que é um conjunto de controles padrão coroada pelo código, ou você pode criar seu próprio controle de ponta a ponta para cima. Você ainda pode usar a herança para criar um controle que herda a partir de um controle existente e adicionar à sua funcionalidade inerente. Independentemente da abordagem utilizada, o.NET Framework fornece a funcionalidade para desenhar uma interface gráfica personalizada para qualquer controle que você criar.
Pintura de um controle é realizada pela execução de código do controle OnPaint método. O único argumento de OnPaint método é um PaintEventArgs objeto que fornece todas as informações e a funcionalidade necessária para processar o controle. O PaintEventArgs fornece, como propriedades, dois objetos principais que serão usados no processamento do seu controle:
ClipRectangleobjeto - o retângulo que representa a parte do controle que será desenhado. Isso pode ser todo o controle, ou parte do controle, dependendo de como o controle é desenhado.
Graphicsobjeto - encapsula vários gráficos e orientada a objetos 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 gráficos para desenho.
O OnPaint evento é acionado sempre que o controle é desenhado ou atualizado na tela e o ClipRectangle objeto representa o retângulo que pintura levará local. Se todo o controle precisa ser atualizada, o ClipRectangle representará o tamanho do controle inteiro. Se apenas parte do controle precisa ser atualizado, no entanto, o ClipRectangle objeto representará a região que precisam 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 a Control classe, você deve substituir o OnPaint método e fornecer o código de processamento de elementos gráficos no. 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 simple. Ele chama o OnPaint método da classe base, ele cria um Pen de objeto com o qual desenhar e finalmente desenha uma elipse no retângulo é determinado pelo Location e Size de controle. Embora a maioria dos códigos de processamento será significativamente mais complicado do que isso, este exemplo demonstra o uso da Graphics objeto contido dentro de PaintEventArgs objeto. Observe que, se a herança de uma classe que já tem uma representação gráfica, como UserControl ou Buttone você não deseja incorporar essa representação de seu processamento, você não deve chamar sua classe base OnPaint método.
O código de OnPaint método do seu controle será executado quando o controle é desenhado de pela primeira vez e sempre que ela for atualizada. Para garantir que o controle é redesenhado toda vez que ele é redimensionado, adicione a seguinte linha ao 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 gráficos para desenho