Cómo borrar gráficos en un control transparente en formularios de Windows
-
05-07-2019 - |
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
- Anulando OnPaintBackground para no hacer nada. O simplemente llamando a base.OnPaintBackground. Los mismos resultados.
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.