снимок экрана управления winforms через C # - PullRequest
5 голосов
/ 13 января 2011

Можно ли получить скриншот элемента управления в winforms, не отображая его на экране? Как насчет компонента webBrowser?

1 Ответ

12 голосов
/ 13 января 2011

Да. Это можно сделать.

Я взялся за пример программы, чтобы сделать это. Простите мои соглашения об именах и организацию кода, это было очень быстро взорвано. Вы можете изменить его, чтобы лучше соответствовать вашим потребностям, но это показывает основы.

У меня есть одна форма с тремя элементами управления:

  • button1: кнопка с настройками по умолчанию.
  • button2: кнопка со свойством Visible, для которого установлено значение false, и для текста установлено значение «button2 - not visible»
  • webBrowser1: элемент управления WebBrowser с видимостью, установленной в значение false, задает размер 250, 101 (именно так, как он умещается в моей форме. Размер уместен, когда вы посмотрите на захват внизу моего ответа. нужно определить его соответственно.)

вот код в 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");
        }

    }
}

Это привело к следующим захватам:

alt text

alt text

...