各位编程精英们帮我看个问题,winform datagridview控件但是Paint事件执行多次,如何阻止它?有厚礼相送
详细是这样的,我首先填充了单元格的文字部分,然后在paint时间里重绘datagridview事件,问题来了。Paint事件执行了多次。我初步知道在以下几种情况触发了事件...
详细是这样的,我首先填充了单元格的文字部分,然后在paint时间里重绘datagridview事件,问题来了。Paint事件执行了多次。我初步知道在以下几种情况触发了事件,关键是我单击一个cell单元格时也触发了Paint事件,这使我的程序变得很卡!!我只想在下面1.3情况下触发它,能不能把2给阻止呢??各位路过的精英们给我出个主意啊。帮我解决了给你们买啤酒喝!
1 窗体显示时触发Paint事件
2、 当窗体无效区域变有效时触发Paint事件
3、 人为调用刷新函数时触发Paint事件。 展开
1 窗体显示时触发Paint事件
2、 当窗体无效区域变有效时触发Paint事件
3、 人为调用刷新函数时触发Paint事件。 展开
1个回答
展开全部
不是说不能做到,只是做到了对你没好处。
如果把2禁用,那么你拿一个其他什么程序的窗口拖到你这个程序之上,然后再把它拖走,很有可能它刚刚盖住的地方就是一片白,真的。
你可以考虑对于每个小块,每次先绘制到内存中的一块缓冲区(Bitmap对象)里面,然后再把Bitmap刷到窗口上。如果没有特别需要,这个Bitmap就不需要更新,每次直接把Bitmap刷上窗口即可,比每次从头绘制应该要快不少
另:没记错的话paint事件里面可以获取“需要重新绘制的矩形”,你只管绘制这块矩形之内的就好,其他部分可以不用重新绘制
如果把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类型)画上去即可。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询