How to clear graphics on a transparent control in windows forms
-
05-07-2019 - |
Question
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
- Overriding OnPaintBackground to do nothing. Or just calling base.OnPaintBackground. Same results.
Solution
Okay, I found the solution here: http://www.bobpowell.net/transcontrols.htm
The Parent controls actually must be invalidated in order to retain the transparent background.
OTHER TIPS
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.