Controle com background transparente!!

Publicado: 21/09/2004 em IntoSpaces
Olá Pessoal!

Estava esses dias trabalhando com GDI+ pra variar, e como sempre esbarrei nas suas limitações…
Já que toquei nesse assunto eu acho ele muito limitado, nos deixa muitas vezes de mãos atadas o que dificulta muito o trabalho. Mas sempre existem soluções então vamos mostrar uma simples solução do que parece ser um grande problema do GDI+.

É muito interessante utlizarmos controles, porém esses controles sempre têm a forma de um retângulo, o que nos deixa limitados, existem umas formas de se trabalhar controles com fundos transparentes com PictureBox, mas que na minha opnião é ridículo.

Segue abaixo uma maneira muito rápida de se criar um controle com background transparente, o que pode ser muito útil se tratando de UI.

Precisamos sobrescrever uma propriedade e um método, vejam

protected override CreateParams CreateParams
{
   get
    {
           CreateParams cp = base.CreateParams;
           cp.ExStyle |= 0x20;
           return cp;
    }
}

protected override void OnPaintBackground(PaintEventArgs e)
{// vazio}

Pronto, com isso o seu controle não terá mais background,  agora fica ao seu dispor fazer o que achar mais interessante com ele, no meu caso eu desenhei um circulo no fundo dele.

private void Grafo_Paint(object sender, PaintEventArgs e)
{
     Graphics g = this.CreateGraphics();
     g.Clear(Color.Transparent);
     g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
     g.FillEllipse(new SolidBrush(Color.YellowGreen),2,2,this.Width-5,this.Height-5);
     g.DrawEllipse(new Pen(new SolidBrush(Color.FromArgb(195,234,117)),3),1,1,Width-4,Height-4);
}

Vejam o resultado no ambiente do Visual Studio

É bem simples, porém ainda temos as limitações que o GDI+ nos impõe, se arrastarmos um controle sobre o outro teremos problemas, então vale analisar se é necessário e aplicável essa técnica.

Essa dica eu consegui pesquisando em um ótimo site dedicado ao c# http://www.c-sharpcorner.com/Code/2003/May/TransparentControls.asp

[]’s
Shinji

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s