winform 控件重绘 refresh

混QWER 2017-09-07 03:27:04
有一个panel1中包含 有panel2,如果panel 1或panel2其中任意一个refresh,两个panel都会调用paint方法。有没有可能panel1重绘不会影响到panel2
...全文
170 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
mk_lucifer 2017-09-07
  • 打赏
  • 举报
回复
重绘时时刻刻都在发生,他的原理是,系统向窗口发送 WM_PAINT消息,即使你调用Refresh,他也是间接调用系统API , InvalidateRect或者Invalidate,具体谁重绘,谁不重绘,C#说的不算, windows说的算,太会根据无效区域的位置来决定windows系统下所有窗口,是否由需要重绘的,有就发送WM_PAINT消息,老老实实重绘你的图形,就和程序卡死一样(程序卡死是不会重绘的),APP卡死在旧版windows系统下,啥奇葩都有,一小片黑,重影,各种情况,都是因为决绝重绘造成的。。。
mk_lucifer 2017-09-07
  • 打赏
  • 举报
回复
可以,你可以在Panel2里禁止函数执行,但问题是将你看不到panel2。。 这就是个擦黑板的问题, 黑板擦了,把Panel1画上了,但不画Panel2,你就没有Panel2, 这不只是父子关系的问题,还有遮挡关系,如果它上面有个其他无关的窗口甚至是另一个程序的窗口和Panel1重叠,都有可能导致这个窗口必须重绘。。 总之,重绘是必须的,你可以决定,但操作系统也决定这个行为,让你重绘那是必须的,因为不重绘就没有图形了。。
混QWER 2017-09-07
  • 打赏
  • 举报
回复
引用 1 楼 Libby1984 的回复:
不可能的。包含关系,两个都会Paint。
如果两个不是包含关系,而是一个在一个上面,上面那个panel就算是透明的也会挡住下面那个panel绘出的图形。 这种应该怎么办呢。
  • 打赏
  • 举报
回复
不可能的。包含关系,两个都会Paint。

110,561

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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