So, I am pretty unfamiliar with windows forms development.
I'm trying to create a "hey I'm busy doing stuff" component that just spins a shape around. I want this control to be transient and draw on top of any other controls. The class inherits directly from Control.
So I have this in the constructor:
SetStyle(ControlStyles.Opaque, true);
and this:
protected override CreateParams CreateParams
{
get
{
CreateParams parms = base.CreateParams;
parms.ExStyle |= 0x20;
return parms;
}
}
Which gets me a control that will draw on top of other controls.
Now my problem is this. I repaint the control a few times a second to give the appearane of a smooth animation. However, I can't figure out how to clear what was drawn in the previous frame. Using e.Graphics.Clear(Color.Transparent)
in OnPaint
turns the whole control black.
Is there a way to just clear the drawn contents of a control?
I've noticed that Resizing the the control will clear the background.
Things that Don't Work
Okay, I found the solution here: https://web.archive.org/web/20141227200000/http://bobpowell.net/transcontrols.aspx
The Parent controls actually must be invalidated in order to retain the transparent background.
You may have to override OnPaintBackground that this article presents: http://saftsack.fs.uni-bayreuth.de/~dun3/archives/creating-a-transparent-panel-in-net/108.html
You may also need to Invalidate the control when it needs to be cleared to force OnPaintBackground to be called.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With