Я столкнулся с очень странной проблемой при попытке получить снимок экрана TableLayoutPanel в моей форме.Мой код работает только при вставке случайного MsgBox
У меня есть этот код (взятый из другого вопроса (How to get a screenshot, only for a picturebox) код, предоставленный пользователем "Chase Rocker"):
Dim s As Size = TableLayoutPanel1.Size
Dim memoryImage = New Bitmap(s.Width, s.Height)
Dim memoryGraphics As Graphics = Graphics.FromImage(memoryImage)
Dim ScreenPos As Point = Me.TableLayoutPanel1.PointToScreen(New Point(0, 0))
memoryGraphics.CopyFromScreen(ScreenPos.X, ScreenPos.Y, 0, 0, s)
Form3.PictureBox1.SizeMode = PictureBoxSizeMode.AutoSize
Form3.PictureBox1.BringToFront()
Form3.PictureBox1.Image = memoryImage
Теперь, вот идет моя проблема. Этот код дает мне пустую картинку. Похоже, это скриншот, но все, что я вижу, белое. Теперь я пытался выяснить, правильный ли размер, поэтому я возился с MsgBox. Добавить эту строку в код:
MsgBox("Random Message")
Получение
Dim s As Size = TableLayoutPanel1.Size
MsgBox("Random Message")
Dim memoryImage = New Bitmap(s.Width, s.Height)
Dim memoryGraphics As Graphics = Graphics.FromImage(memoryImage)
Dim ScreenPos As Point = Me.TableLayoutPanel1.PointToScreen(New Point(0, 0))
memoryGraphics.CopyFromScreen(ScreenPos.X, ScreenPos.Y, 0, 0, s)
Form3.PictureBox1.SizeMode = PictureBoxSizeMode.AutoSize
Form3.PictureBox1.BringToFront()
Form3.PictureBox1.Image = memoryImage
По некоторым причинам я не знаю, скриншот теперь работает. Я больше не вижу белого цвета, но фактический снимок экрана TableLayoutPanel. Для меня очень странно, что код работает только с MsgBox. Может быть, я что-то упустил. кто-нибудь знает, почему это произошло? Спасибо!
В каком случае вы используете этот код? Надеюсь, что не в конструкторе, а в Форме. – Steve
Private Sub Button1_Click (отправитель As Object, e As EventArgs) Ручки Button1.Click Простое событие кнопки. Это же событие также заполняет TableLayOutPanel всей информацией. –
Если заполнение происходит в том же месте, где вы захватываете изображение, то у вас ничего нет в таблице tablelayoutpanel, пока вы не выйдете из обработчика события. Другими словами, механизм winforms не может ничего нарисовать до тех пор, пока вы не выйдете из обработчика события. – Steve