2008-11-05 1 views
32

Wie erhalten Sie programmgesteuert ein Bild eines .Net-Steuerelements?Wie man eine .Net WinForms-Steuerung programmgesteuert mit einem Bildschirm erfasst?

+0

Dies ist ein bisschen zu vage, versuchen zu erklären, was Sie versuchen zu tun. Nein wandern die Down-Stimmen ab. –

+1

Keine Wanderung? Ich denke, die Bedeutung ist vollkommen klar. Er möchte eine Bitmap-Darstellung eines Steuerelements erhalten. – Will

+3

Ich stimme Will zu. Es ist eine einfache und klare Frage. – Bogdan

Antwort

48

Es gibt eine Methode für jede Steuerung namens DrawToBitmap. Sie müssen dazu nicht p/invoke aufrufen.

Control c = new TextBox(); 
System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(c.Width, c.Height); 
c.DrawToBitmap(bmp, c.ClientRectangle); 
3

Für WinForms-Steuerelemente, die es unterstützt, gibt es ein Verfahren, in der System.Windows.Forms.Control Klasse:

public void DrawToBitmap(Bitmap bitmap, Rectangle targetBounds); 

Dies ist jedoch nicht bei allen Kontrollen funktionieren. Anbieter von Drittanbieterkomponenten haben umfassendere Lösungen.

7

Sie programmatisch die DrawToBitmap Methode der Control-Klasse ziemlich leicht ein Bild von einer .NET-Kontrolle bekommen können .NET 2.0

Hier starten in einer Probe in VB

Dim formImage As New Bitmap("C:\File.bmp") 
    Me.DrawToBitmap(formImage, Me.Bounds) 

Und hier ist es in C#:

Bitmap formImage = New Bitmap("C:\File.bmp") 
this.DrawToBitmap(formImage, this.Bounds) 
1

, wenn es nicht auf dem Co Wenn Sie versuchen, dies zu tun, können Sie es normalerweise in die Basissteuerklasse umwandeln und dort die DrawToBitmap-Methode aufrufen.

5

Mit Control.DrawToBitmap können Sie die meisten Steuerelemente in eine Bitmap zeichnen. Dies funktioniert nicht mit RichTextBox und einigen anderen. Wenn Sie diese oder ein Steuerelement mit einem davon erfassen möchten, müssen Sie PInvoke ausführen, wie in dem von Jeff vorgeschlagenen Code-Projektartikel http://www.codeproject.com/KB/graphics/imagecapture.aspx beschrieben. Achten Sie darauf, dass einige dieser Methoden alle auf dem Bildschirm angezeigten Bilder erfassen. Wenn Sie also ein anderes Fenster haben, das Ihre Kontrolle abdeckt, erhalten Sie das stattdessen.

+0

Für WebBrowser, ich einfach zu steuern und es dort aufrufen. Ich habe es getan und weiß, dass es funktioniert. Nicht sicher über RichTextBox – Nick

1
Panel1.Dock = DockStyle.None ' If Panel Dockstyle is in Fill mode 
Panel1.Width = 5000 ' Original Size without scrollbar 
Panel1.Height = 5000 ' Original Size without scrollbar 

Dim bmp As New Bitmap(Me.Panel1.Width, Me.Panel1.Height) 
Me.Panel1.DrawToBitmap(bmp, New Rectangle(0, 0, Me.Panel1.Width, Me.Panel1.Height)) 
'Me.Panel1.DrawToBitmap(bmp, Panel1.ClientRectangle) 
bmp.Save("C:\panel.jpg", System.Drawing.Imaging.ImageFormat.Jpeg) 

Panel1.Dock = DockStyle.Fill 

Hinweis: Sein adaequat

2

Dies ist, wie es für eine ganzes Form zu tun, nicht nur den Client-Bereich (die nicht auf die Titelleiste und anderen Verband haben)

 Rectangle r = this.Bounds; 
     r.Offset(-r.X,-r.Y); 
     Bitmap bitmap = new Bitmap(r.Width,r.Height); 
     this.DrawToBitmap(bitmap, r); 
     Clipboard.SetImage(bitmap); 
Verwandte Themen