各位编程精英们帮我看个问题,winform datagridview控件但是Paint事件执行多次,如何阻止它?有厚礼相送

详细是这样的,我首先填充了单元格的文字部分,然后在paint时间里重绘datagridview事件,问题来了。Paint事件执行了多次。我初步知道在以下几种情况触发了事件... 详细是这样的,我首先填充了单元格的文字部分,然后在paint时间里重绘datagridview事件,问题来了。Paint事件执行了多次。我初步知道在以下几种情况触发了事件,关键是我单击一个cell单元格时也触发了Paint事件,这使我的程序变得很卡!!我只想在下面1.3情况下触发它,能不能把2给阻止呢??各位路过的精英们给我出个主意啊。帮我解决了给你们买啤酒喝!
1 窗体显示时触发Paint事件
2、 当窗体无效区域变有效时触发Paint事件
3、 人为调用刷新函数时触发Paint事件。
展开
 我来答
空雪梦见
2013-05-31 · TA获得超过5598个赞
知道大有可为答主
回答量:2522
采纳率:75%
帮助的人:1212万
展开全部
不是说不能做到,只是做到了对你没好处。
如果把2禁用,那么你拿一个其他什么程序的窗口拖到你这个程序之上,然后再把它拖走,很有可能它刚刚盖住的地方就是一片白,真的。
你可以考虑对于每个小块,每次先绘制到内存中的一块缓冲区(Bitmap对象)里面,然后再把Bitmap刷到窗口上。如果没有特别需要,这个Bitmap就不需要更新,每次直接把Bitmap刷上窗口即可,比每次从头绘制应该要快不少
另:没记错的话paint事件里面可以获取“需要重新绘制的矩形”,你只管绘制这块矩形之内的就好,其他部分可以不用重新绘制
追问
谢谢啊。可是bitmap怎么用呢,也是写在paint事件里面吗?能不能给小段代码给小弟参考下啊
追答
你怎么paint的?是不是拿到Graphics对象然后朝着它就开始画画画?

好了,现在你可以自己创建一个Graphics对象,从一个图。
Bitmap bmp = new Bitmap(宽, 高);
Graphics g = Graphics.FromImage(bmp);
现在你可以开始画了,画的东西全在那个bmp里。
这就是“事先画好”
完了把bmp存到某个地方,之后要paint的时候,直接
g.DrawImageUnscale 把这个Bitmap(Bitmap属于Image类型)画上去即可。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式