No, this is the right way to do this. Trying to use something like TableLayoutPanel is not only excruciatingly painful, but also sucks off serious dirt, taking up a second or more paint. It takes a bunch of code, but it's not hard code. Lots of loop options.
Get scrolling using the AutoScrollMinSize panel. Use Graphics.TranslateTransform (), passing an AutoScrollPosition in a Paint or OnPaint event. The latter is recommended, get your own control from the panel to save the code separately. You have a lot of flexibility to customize the look, have some fun.
source share