Tuesday, August 3, 2010

C# Forms Stop Redraw/Paint

I've tried to stop the 'Paint' event on a C# WinForm without overriding the 'Paint' event.

I've done some research and found a lot of people have this problem, but those problems can be easily fixed using the 'DoubleBuffered' property found on the form itself.  The main problem fixed by 'DoubleBuffered' is that the form flickers.

This is not my problem.

I want to stop the 'Paint' event of a 'TreeView', while I expand all the nodes.  This is important when there are many nodes in the tree.  If you 'Paint' while expanding, the form becomes unresponsive and ugly.

The only solution that I can come up with, is to 'Hide()' the control, expand the nodes, then 'Show()' the control again.  I tried this with the 'Form' itself, but it didn't seem natural.  By performing the operation with the control, it's tough to tell if the control is redrawing, or the nodes are just being added.

While this is a 'hacky' solution, I don't know any other way.

BTW: SuspendLayout() => ResumeLayout() doesn't stop the 'Paint' event.

No comments:

Post a Comment