Pregunta

Por lo tanto, no estoy muy familiarizado con el desarrollo de formularios de Windows.

Estoy intentando crear un " hey estoy ocupado haciendo cosas " Componente que simplemente hace girar una forma. Quiero que este control sea transitorio y dibuje sobre cualquier otro control. La clase hereda directamente de Control.

Así que tengo esto en el constructor:

SetStyle(ControlStyles.Opaque, true);

y esto:

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

Lo que me da un control que dibujará sobre otros controles.

Ahora mi problema es este. Vuelvo a pintar el control unas cuantas veces por segundo para darle al sujeto una animación suave. Sin embargo, no puedo averiguar cómo borrar lo que se dibujó en el marco anterior. El uso de e.Graphics.Clear (Color.Transparent) en OnPaint hace que todo el control sea negro.

¿Hay una manera de simplemente borrar los contenidos dibujados de un control?

Me he dado cuenta de que cambiar el tamaño del control borrará el fondo.

Cosas que no funcionan

  1. Anulando OnPaintBackground para no hacer nada. O simplemente llamando a base.OnPaintBackground. Los mismos resultados.
¿Fue útil?

Solución

Bien, encontré la solución aquí: http://www.bobpowell.net/transcontrols.htm

Los controles principales realmente deben ser invalidados para conservar el fondo transparente.

Otros consejos

Es posible que tenga que anular OnPaintBackground que presenta este artículo: http://saftsack.fs.uni-bayreuth.de/~dun3/archives/creating-a-transparent-panel-in-net/108.html

Es posible que también deba Invalidar el control cuando deba borrarse para obligar a OnPaintBackground a que se llame.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top