A: 

The System.Windows.Forms.TableLayoutPanel control supports dragging and dropping, you just have to handle the right events. You could make your own "GridItem" user control, with the icon, caption, background color, etc displayed on a Panel, and then plop a bunch of them in the tablelayoutpanel, and wire up some event handlers. Here's something similar:

http://social.msdn.microsoft.com/Forums/en-US/Vsexpressvcs/thread/1cade626-b76d-40c5-9e5a-101cf2a5e412

echo
I started writing some custom components, but I might give that a shot as my base. I have FlowablePanel, which automatically orders its child controls based on their width and height, which I had planned to inherit to DragabbleFlowablePanel, that will allow the controls to be moved around from inside.
snicker
Hey, FlowLayoutPanel already exists but doesn't suit my purposes. I reinvented a wheel!
snicker
A: 
snicker