MSDN.WhiteKnight - Stack Overflow answers
Ответ на "Скиншот контрола panel"
Answer 863410
Можно временно увеличить размеры панели, так чтобы она захватывала все элементы, а после создания скриншота вернуть назад:
//сохраняем текущее положение полос прокрутки int scrollx = -panel1.AutoScrollPosition.X; int scrolly = -panel1.AutoScrollPosition.Y; Size szCurrent = panel1.Size; //сохраняем текущий размер панели int xmax = panel1.Size.Width, ymax = panel1.Size.Height; //сбрасываем полосы прокрутки в начало panel1.AutoScrollPosition = new Point(0, 0); try { //найдем крайние координаты для элементов на панели foreach (Control c in panel1.Controls) { if (c.Right > xmax) xmax = c.Right; if (c.Bottom > ymax) ymax = c.Bottom; } //добавим запас на полосы прокрутки xmax += SystemInformation.VerticalScrollBarWidth; ymax += SystemInformation.HorizontalScrollBarHeight; //временно увеличим размеры панели, так чтобы все элементы на ней уместились panel1.Size = new System.Drawing.Size(xmax, ymax); //создадим полный скришот панели Bitmap memoryImage; Rectangle rect = new Rectangle(); rect.Height = ymax; rect.Width = xmax; rect.X = 0; rect.Y = 0; memoryImage = new Bitmap(xmax, ymax); panel1.DrawToBitmap(memoryImage, rect); pictureBox1.Image = memoryImage; } finally { //возвращаем старый размер panel1.Size = szCurrent; //возвращаем старые позиции прокрутки panel1.AutoScrollPosition = new Point(scrollx, scrolly); }
Content is retrieved from StackExchange API.
Auto-generated by ruso-archive tools.