32 Stimmen

Wie kann man einen Screenshot von einem .Net WinForms-Steuerelement programmatisch erstellen?

Wie kann man programmatisch ein Bild eines .Net-Steuerelements erhalten?

48voto

Für jedes Steuerelement gibt es eine Methode namens DrawToBitmap . Dazu brauchen Sie nicht p/invoke zu verwenden.

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

7voto

Joey Punkte 2891

Sie können ein Bild eines .NET-Steuerelements programmatisch ziemlich einfach erhalten, indem Sie die DrawToBitmap Methode der Klasse Control ab .NET 2.0

Hier ist ein Beispiel 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)

5voto

Hallgrim Punkte 14653

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, das eines von ihnen hat, erfassen möchten, müssen Sie PInvoke wie in diesem CodeProject-Artikel beschrieben tun: Bildeinzug

Achten Sie darauf, dass einige dieser Methoden alles erfassen, was sich auf dem Bildschirm befindet. Wenn Sie also ein anderes Fenster haben, das Ihr Steuerelement verdeckt, erhalten Sie stattdessen dieses.

3voto

Alan Punkte 6321

Für WinForms-Steuerelemente, die dies unterstützen, gibt es eine Methode in der Klasse System.Windows.Forms.Control:

public void DrawToBitmap(Bitmap bitmap, Rectangle targetBounds);

Dies funktioniert jedoch nicht bei allen Kontrollen. Drittanbieter von Komponenten haben umfassendere Lösungen.

3voto

Mark Lakata Punkte 18998

So machen Sie es für eine ganze Form und nicht nur den Client-Bereich (der keine Titelleiste und andere Aufmachung hat)

        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);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X