帮忙看下winform窗口双缓存 之后,内部控件picturebox 使用gdi+ 绘制操作无效

ddup_fswx6 2020-05-19 05:13:54
这段是放在在父窗口,主要消除在对内部窗口移除再添加产生的闪烁问题

但是加了这段后,闪烁是解决了。但子窗口有个picturebox,获取Graphics,在上面绘图时失效,画不出来,不加之前是可以的。
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle |= 0x02000000;
return cp;
}
}




...全文
376 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
lianying168000 2020-06-11
  • 打赏
  • 举报
回复
呃呃 帮你顶一下帖子。我之前有一个想优化的地方是对一个Form使用了CreateParams之后(因为这个窗体的绘制是用很多控件组成的,不缓存的话拖动滚动条快一点的话就会有拖影),要是在它的旁边以Tab标签页的形式打开另一个子窗体A,然后再返回使用了CreateParams的Form,那么该Form就不会正常显示了,而是变成了A。暂时还没优化这个地方,后面再说,目前能用吧。
  • 打赏
  • 举报
回复
引用 4 楼 ddup_fswx6 的回复:
[quote=引用 2 楼 年轻的程序员小唐 的回复:] 这个东西用起来有隐患的,可能会有奇奇怪怪的bug出现,我现在一般都不使用移除和添加,都是隐藏和显示。如果硬性需求那确实没办法。只是这段代码用起来会有很奇怪的BUG出现,我发过蛮多帖子的问题都是这段代码引起的。。。后来我把这段代码删了,然后尽量不去删除添加窗体。 至于这段代码到底是和原理我至今还不清楚,希望有大神讲解一下
你可以去看下windows Api ,cp.ExStyle |= 0x02000000 这个值有强制性对所有父子后代控件缓冲的效果,无法搞特殊性.... [/quote] 我可以告诉你这个东西有一个很变态的BUG,我是用的tabcontrol控件,xp和win7、win10的系统下所展现的效果不同,导致我在tabpage中使用datagridview控件的时候,切换tabpage页面(不重新创建窗体,仅刷新数据),然后datagridview控件表格的单元格分割线会穿透出其他页面的控件。然后还有就是会导致某些窗体中的textbox和combox全部为选中状态(但是实际上没有一个textbox、combobox控件有获取焦点),就这些BUG搞得我焦头烂额。。。后来我尝试删除一些代码才发现是这串代码的问题,我不知道别人会不会遇到。
ddup_fswx6 2020-06-11
  • 打赏
  • 举报
回复
引用 1 楼 lianying168000 的回复:
呃呃 帮你顶一下帖子。我之前有一个想优化的地方是对一个Form使用了CreateParams之后(因为这个窗体的绘制是用很多控件组成的,不缓存的话拖动滚动条快一点的话就会有拖影),要是在它的旁边以Tab标签页的形式打开另一个子窗体A,然后再返回使用了CreateParams的Form,那么该Form就不会正常显示了,而是变成了A。暂时还没优化这个地方,后面再说,目前能用吧。



暂时就是不整体Dispose组件,对TabPage单独remove,效果有明显提升,这都看具体场景,假设切换的tabpage没有一个复用,都要remove重加载,还是逃不了闪烁的问题
ddup_fswx6 2020-06-11
  • 打赏
  • 举报
回复
引用 2 楼 年轻的程序员小唐 的回复:
这个东西用起来有隐患的,可能会有奇奇怪怪的bug出现,我现在一般都不使用移除和添加,都是隐藏和显示。如果硬性需求那确实没办法。只是这段代码用起来会有很奇怪的BUG出现,我发过蛮多帖子的问题都是这段代码引起的。。。后来我把这段代码删了,然后尽量不去删除添加窗体。
至于这段代码到底是和原理我至今还不清楚,希望有大神讲解一下


你可以去看下windows Api ,cp.ExStyle |= 0x02000000 这个值有强制性对所有父子后代控件缓冲的效果,无法搞特殊性....
lianying168000 2020-06-11
  • 打赏
  • 举报
回复
对的,其实关于winform的开发,一个经常遇到的问题就是闪烁了,这个时候我们大可使用变通的方法,比如:是否不必每次都close然后再new一个新Form,是否可以内存常驻一个Form,而只是重新加载它上面的数据。我做几个月winform开发的一个感悟就是:当思维进入死角时,换个变通的方法,当你这样想之后,往往会找到替代的解决方法。
  • 打赏
  • 举报
回复
这个东西用起来有隐患的,可能会有奇奇怪怪的bug出现,我现在一般都不使用移除和添加,都是隐藏和显示。如果硬性需求那确实没办法。只是这段代码用起来会有很奇怪的BUG出现,我发过蛮多帖子的问题都是这段代码引起的。。。后来我把这段代码删了,然后尽量不去删除添加窗体。 至于这段代码到底是和原理我至今还不清楚,希望有大神讲解一下

8,834

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 组件/控件开发
社区管理员
  • 组件/控件开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧