2017-01-26 3 views
2

Предположим, что на панели есть картинкаxox, и на картинке есть изображение datagridview.Как захватить все элементы внутри элемента управления?

Я использую следующий код, чтобы захватить панель:

System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(panel1.ClientRectangle.Width, panel1.ClientRectangle.Height); 
panel1.DrawToBitmap(bmp, panel1.ClientRectangle); 
bmp.Save(@"test.jpg"); 

Но, похоже, что только PictureBox был захвачен, то DataGridView на нем отсутствует.

Как можно захватить изображение вместе с datagridview?

+0

Проверьте иерархию элементов управления, чтобы увидеть, действительно ли 'DataGridView' является дочерним элементом в' Panel'. –

+0

или 'dataGrid1.Parent.DrawToBitmap' и обрезка – Slai

ответ

2

Метод DrawToBitmap захватит графику, нарисованную в событии Paint, и все вложенные элементы управления. Если он отсутствует, он не вложен прямо или косвенно. Вот как это, вероятно, произошло:

Поведение дизайнера Panels и PictureBoxes составляет разных.

Panels, как GroupBoxes, TabPages и еще несколько находятся управления контейнеров.

Это означает, что любой элемент управления перетаскивании на них с помощью мыши получает вложенную в них.

PictureBox является не Container, как, скажем, Button или Label ..

Чтобы гнездо ваш DataGridView в PictureBox у вас есть выбор

  • сдвинув его там с клавиатура (!)
  • гнездо в коде ())

ли проверить успешность клавиатуры образом, перемещая PictureBox, чтобы увидеть, если DGV перемещается вместе с ним ..

Update:

  • Если вы гнездо DGV в PictureBox, который сам вложен в Panel, все будет хорошо, и результат будет выглядеть так же, как вы видите.

  • Однако, если гнездо какDGV и PictureBox в Panel и просто позволить им пересекаться, странная ошибка появится: многократное дублирование управления рисуется в обратном, см here for a post и ссылка об этом проблема, которая documented

управления внутри контейнера осуществляется в обратном порядке.

но, очевидно, все еще ошибка.

+0

Спасибо за ваш ответ. Мне интересно, что означает «перемещение его с помощью клавиатуры (!)»? – camino

+0

Я нашел dataGridView1.Parent = pictureBox1; будет работать, но dataGridView1.Parent = panel1; not – camino

+0

Перемещение с клавиатуры означает только то, что: используя клавиши курсора (вместо мыши), чтобы переместить выбранный элемент управления, действительно будет устанавливать элемент управления в неконтейнере. – TaW

Смежные вопросы