Beginning with .NET FrameWork 2.0, you have the Graphics.CopyFromScreen method that makes this easy.
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
private string deskTopPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
private int snapCount = 0;
private void SaveControlImage(Control theControl)
{
snapCount ++;
Bitmap controlBitMap = new Bitmap(theControl.Width, theControl.Height);
Graphics g = Graphics.FromImage(controlBitMap);
g.CopyFromScreen(PointToScreen(theControl.Location), new Point(0,0), theControl.Size);
controlBitMap.Save(deskTopPath + @"/snap_" + snapCount.ToString() + @".png", ImageFormat.Png);
}
private void SnapShotControl_Click(object sender, EventArgs e)
{
SaveControlImage(YourPanelName);
}