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

  1. Overriding OnPaintBackground para não fazer nada. Ou apenas chamando base.OnPaintBackground. Mesmos resultados.
Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top