2011-01-12 17 views
5

È possibile ottenere uno screenshot di un controllo in winforms senza effettivamente visualizzarlo sullo schermo? Che ne dici di un componente webBrowser?screenshot di un controllo winforms tramite C#

+0

devo chiedere - è una domanda interessante, ma nel perché mai bisogno di fare questo? Sono sinceramente curioso, non prendendo in giro la domanda .... – David

+0

ho bisogno di essere in grado di inviare schermate di metri di controllo grafico ogni volta che determinati criteri sono soddisfatti .. – user441660

+0

mostrando questi controlli per diversi oggetti solo per fare uno snapshot potrebbe non essere una buona idea .. sarebbe bello se posso metterli su un controllo utente, prendere l'istantanea di esso in background e inviarlo come immagine .. – user441660

risposta

11

Sì. Questo può essere fatto.

Ho montato un programma di esempio per farlo. Perdona le mie convenzioni di denominazione e l'organizzazione del codice, questa è stata montata molto rapidamente. Puoi modificarlo per adattarlo meglio alle tue esigenze, ma questo mostra le basi.

Ho un singolo modulo con tre controlli:

  • Button1: Pulsante con le impostazioni di default.
  • Button2: Pulsante con la proprietà Visible impostata su false e il testo impostato su "button2 - non visibile"
  • WebBrowser1: controllo WebBrowser con la visibilità impostato su false, impostare il formato di 250, 101 (solo così si adatta . sulla mia forma la dimensione è rilevante quando si guarda l'acquisizione nella parte inferiore della mia risposta Avrete bisogno di dimensioni di conseguenza)

ecco il codice in Form1:..

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Drawing.Imaging; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 

namespace WindowsFormsApplication1 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 

      PrintInvisibleControl(button2, @"C:\button.jpg"); 
      PrintInvisibleControl(webBrowser1, @"C:\webbrowser.jpg"); 


     } 

     private void PrintInvisibleControl(Control myControl, string filename) 
     { 

      Graphics g = myControl.CreateGraphics(); 
      //new bitmap object to save the image   
      Bitmap bmp = new Bitmap(myControl.Width, myControl.Height); 
      //Drawing control to the bitmap   
      myControl.DrawToBitmap(bmp, new Rectangle(0, 0, myControl.Width, myControl.Height)); 
      bmp.Save(filename, ImageFormat.Jpeg); 
      bmp.Dispose(); 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 
      webBrowser1.Navigate("http://www.microsoft.com"); 
     } 

    } 
} 

Ciò ha provocato le seguenti acquisizioni:

alt text

alt text

+4

Qualcosa non mi è chiaro. Come funziona 'Graphics g = myControl.CreateGraphics();' usato? – beppe9000

Problemi correlati