Reduce flickering on custom invalidate/paint
Say we are doing custom painting on a panel, and we want to reduce flickering as much as possible. There's a few ways to do it, but this is the greatest...
Let's say your panel is called this.splitContainerMain.Panel2
, then do this in your form constructor...
typeof(Panel).InvokeMember("DoubleBuffered",
BindingFlags.SetProperty | BindingFlags.Instance | BindingFlags.NonPublic,
null, this.splitContainerMain.Panel2, new object[] { true });
Background info on how this sort of thing is done...
In a method, such as RefreshPanel() (which is also called very early in form's life)
var bitMap = new Bitmap(splitContainerMain.Panel2.Width, splitContainerMain.Panel2.Height);
using (var g = Graphics.FromImage(bitMap)) {
//Do your custom drawing... something more inspired than this hopefully
g.DrawRectangle(System.Drawing.Pens.Black, 10, 10, 10, 10);
}
//This causes the repaint!
this.splitContainerMain.Panel2.Invalidate();
And then, in the paint method, just render the bitmap.
private void splitContainer1_Panel2_Paint(object sender, PaintEventArgs e)
{
if (bitMap == null) return;
e.Graphics.DrawImage(bitMap, new Point(0, 0));
}