控件截屏,包括控件不可见部分,即滚动条以外的部分

     在上一篇文章中讲了如何获取控件图像,即控件截屏,用控件的DrawToImage可以实现,但这种方法只能获取控件工作区即可见部分的图像,如果控件有滚动条,滚动条以外看不见的那部分又如何截取呢?


     这个问题我在国内外网上搜了好久,一直都没有找到方法,今天突然想到了以下办法,解决了我几天来的困扰,在此与大家分享了。

控件中有一个DisplayRectangle属性,这个属性比较有用,它指示的是控件虚拟工作区即包括不可见部分的框区。知道我这个属性后,我就想到了可不可以先把控件工作区Size放大到虚拟工作区那么大,然后再用DrawToImage截屏,截完后再把控件缩放回原来尺寸。按这种方法写完代码后发现还是没法截控件全屏。再仔细想了想,觉得问题可能出在控件放大上,控件放大时如果超过它父控件的大小那是没法放大的,鉴于此,我就把

1.控件的父控件先指向null,

2.再把控件工作区Size放大到虚拟工作区那么大

3.然后再用DrawToImage截屏

4.截完后再把控件缩放回原来尺寸

5.控件的父控件恢复原来值。


写完代码后果真有效,开心啊。

 

Demo

 

           Control c= uc2.panel1.Parent;

            Size s = uc2.panel1.Size;

            uc2.panel1.Parent = null;

            uc2.panel1.Size = uc2.panel1.DisplayRectangle.Size;

            //uc2.panel1.Update();

            uc2.panel1.DrawToBitmap(img, new Rectangle(0, 0, uc2.panel1.DisplayRectangle.Width,                        uc2.panel1.DisplayRectangle.Height));

            panel1.BackgroundImage = img;

 

            uc2.Size = s;

            uc2.panel1.Parent = c;

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值