Como limpar gráficos em um controle transparente em Windows Forms
-
05-07-2019 - |
Pergunta
Então, eu estou muito familiarizado com o desenvolvimento Windows Forms.
Eu estou tentando criar um componente de "hey eu estou ocupado fazendo coisas" que só gira uma forma em torno. Eu quero esse controle a ser transitórios e desenhar em cima de quaisquer outros controles. Os herda classe diretamente de Control.
Então, eu tenho isso no construtor:
SetStyle(ControlStyles.Opaque, true);
e este:
protected override CreateParams CreateParams
{
get
{
CreateParams parms = base.CreateParams;
parms.ExStyle |= 0x20;
return parms;
}
}
O que me leva um controle que vai chamar em cima de outros controles.
Agora o meu problema é este. Eu pintar o controle algumas vezes por segundo para dar a appearane de uma animação suave. No entanto, eu não consigo descobrir como limpar o que estava desenhado no quadro anterior. Usando e.Graphics.Clear(Color.Transparent)
em OnPaint
transforma todo o controle negro.
Existe uma maneira apenas para limpar o conteúdo extraídos de um controle?
Tenho notado que Redimensionar o controle irá limpar o fundo.
As coisas que não funcionam
- Overriding OnPaintBackground para não fazer nada. Ou apenas chamando base.OnPaintBackground. Mesmos resultados.
Solução
Ok, eu encontrei a solução aqui: http://www.bobpowell.net/transcontrols.htm
Os controles Pais realmente deve ser invalidado, a fim de manter o fundo transparente.
Outras dicas
Você pode ter que substituir OnPaintBackground que este artigo apresenta: http://saftsack.fs.uni-bayreuth.de/~dun3/archives/creating-a-transparent-panel-in-net/108.html
Você também pode precisar para invalidar o controle quando ele precisa ser limpo para forçar OnPaintBackground a ser chamado.