A Paneli, ben sadece PictureBox yerine Paneli kullanmak sadece PictureBox.Dock = Fill
mülkiyet seti ile Panel içinde PictureBox yerleştirmek önermek (veya) TakeScreenshotFromForm() işlevini ElektroKit Çerçeve sayfasından kullanabilirsiniz.

Tam çalışma örneği: Bunun yerine kullandığım metodolojinin
Imports System.Drawing.Drawing2D
Imports System.Drawing.Imaging
Public Class Form1 : Inherits Form
Friend WithEvents ScreenshotTimer As New System.Windows.Forms.Timer
Private Sub Test() Handles MyBase.Shown
Form2.Show()
With Me.ScreenshotTimer
.Interval = 100
.Enabled = True
.Start()
End With
Me.PictureBox1.BackgroundImageLayout = ImageLayout.Stretch
End Sub
Private Sub ScreenshotTimer_Tick(sender As Object, e As EventArgs) Handles ScreenshotTimer.Tick
If Me.PictureBox1.BackgroundImage IsNot Nothing Then
Me.PictureBox1.BackgroundImage.Dispose()
End If
Me.PictureBox1.BackgroundImage = TakeScreenshotFromForm(Form2, includeMouse:=True)
End Sub
Public Shared Function TakeScreenshotFromForm(ByVal f As Form,
Optional ByVal includeMouse As Boolean = False,
Optional ByVal pixelFormat As PixelFormat = PixelFormat.Format24bppRgb) As Image
If Not f.Visible Then
Return Nothing
End If
Dim bmp As New Bitmap(f.Size.Width, f.Size.Height, pixelFormat)
Using g As Graphics = Graphics.FromImage(bmp)
g.InterpolationMode = InterpolationMode.Default
g.PixelOffsetMode = PixelOffsetMode.Default
g.CopyFromScreen(f.Location, New Drawing.Point(0, 0), f.Size)
' Draw the cursor in the image.
If includeMouse Then
Dim cursorSize As System.Drawing.Size = CType(f.Cursor.HotSpot, System.Drawing.Size)
cursorSize.Width -= ((f.Size.Width - f.ClientSize.Width) \ 2)
cursorSize.Height -= ((f.Size.Height - f.ClientSize.Height) - ((f.Size.Width - f.ClientSize.Width) \ 2))
Dim formPoint As Drawing.Point = f.PointToClient(Drawing.Point.Subtract(Control.MousePosition, cursorSize))
Cursors.Arrow.Draw(g, New Rectangle(formPoint.X, formPoint.Y, cursorSize.Width, cursorSize.Height))
End If
End Using
Return bmp
End Function
End Class
, ayrıca olduğunda properlly Formu yakalamak için Control.DrawToBitmap() yöntemi kullanabilirsiniz görünmüyor (ekranda tamamen görünmez veya başka pencerelerle kaplanmış), ancak sonuçta ortaya çıkan görüntünün, Örneğin TextBox caret.
Dim bmp As New Bitmap(f.Bounds.Size.Width, f.Bounds.Size.Height, pixelFormat)
f.DrawToBitmap(bmp, New Rectangle(0, 0, f.Bounds.Size.Width, f.Bounds.Size.Height))
' ...
bu bir süre sonra belleğime aşırı yüklenmeyecek mi? ve bu normal ekran görüntüsü ile aynı mı yoksa başka bir şey mi? @elektroStudios –
@Thomas Dutoit Hayır, tek kullanımlık nesneler her zaman elden çıkarılır, ancak her aramadan sonra işlemin daha fazla bellek alanı ayırdığına dikkatinizi çekebilirsiniz. Çünkü .Net hafızayı yönetir (herhangi bir zamanda bir çöp koleksiyonunu zorlayabilirsin) Daha doğru bir hafıza tüketim değeri görmeye çalışmak için zaman, çünkü zorlamak için çok tavsiye edilmez). Bir "normal ekran görüntüsü" için ne demek istiyorsunuz ?, gösterdiğim yöntem, belirtilen formun bir görüntüsünü (ekran görüntüsü) alıyor, sizin sorduğunuz şey değil mi ?, Umarım bu yardım !. – ElektroStudios
Cevabımın alt kısmında açıklanan alternatif yöntem, ekran görüntüsünden doğrudan kopyalamamış olmasından dolayı, ekran görüntüsünden daha "işlenmemiş bir görüntü" olabilir, çünkü bu alternatifi kullanıyorum dediğiniz gibi, odak dikdörtgen veya Bir karet, ancak diğer tarafta, ekranda görünmediğinde bir Form yakalamanız yararlı olur. – ElektroStudios