A: 

Making a custom control wouldn't be too bad. I would inherit from Panel or a Usercontrol as I believe both automatically add scrollbars for the content.

Dynamically adding containers (like PictureBoxes) and captions for each image, handling the mousedown or mouseclick event for the container and perhaps drawing a red square around it to show that it is selected. The "hardest" part would be resampling the image to 128x128 if they are not already that size and even that can easily be with GDI+.

The resampling to 128x128 (or really, 128xH or Wx128) is already done. I just don't love debugging and making everything all snappy and robust, testing and tweaking it since that takes time.
Jared Updike
And getting the ListView to work also means I get things like arrow keys and focus/selection for free.
Jared Updike
+1  A: 

You could use the FlowLayoutPanel and drop pictureboxes in it. Set the picturebox to a size of 128x128 and the sizemode to 'zoom' (This takes care of resizing your image without loss of aspect ratio). You can even programatically add the pictureboxes.

PictureBox pb = New Picturebox;
 pb.image = gcf.image128;
 FlowLayoutPanel1.Controls.Add(pb)

Since you need to have a label under the picturebox, you could create a Usercontrol like Pastor said that all it has is a picturebox and a label under it. Then that would be the control instance you would add to your flowlayoutpanel.

jvanderh
I might try this. The free scrolling (hopefully) and layout is what I want. The problem is it needs to scroll smoothly.
Jared Updike
You can control the margin around the pictureboxes (or your control) to set the spacing you need between them using the Margin property of each picturebox.
jvanderh
+2  A: 

Disclaimer: I work for Atalasoft

There is an image thumbnail control in our .NET Imaging SDK, DotImage

Lou Franco
The built-in .NET ListView is not as cleanly designed as I would have hoped; I'm surprised that it doesn't "just work", with all of these little details to deal with. I can see how Atlassoft has a market for better designed components! You'd think there would be a control for browsing thumbnails where you just drop your images and "boom", it just works... but perhaps the idea of all these "big" (> 100 pixels :-) images was outlandish when Win95/NT were designed...
Jared Updike
@Jared, this is because ListView in time evolute with windows, and still based on ideas designed in Win95.
arbiter
+2  A: 

For update:

  1. Set image list color depth in addition to image size (ilist.ColorDepth = ColorDepth.Depth24Bit)
  2. WinForms ListView does not have possibility to change icon spacing, however it can be easily done using Win32. You need to send LVM_SETICONSPACING to your ListView (there is a lot of tutorials how to use SendMessage win32 function in .net, so I think this direction must be enough for you).
arbiter
+2  A: 
Grammarian
I'll have to play with this.
Jared Updike