我不知道这三种方法中哪一种最适合我。他们都为我工作。有谁知道刷新,更新和重绘之间的区别?
答案 0 :(得分:39)
根据在线文档。
Refresh - 重新绘制屏幕上的控件。
调用Refresh方法重新绘制 立即控制。刷新呼叫 重绘方法。使用刷新和 重复绘制方法。
Repaint - 强制控件在屏幕上重绘其图像。
调用重绘以强制控制 立即重绘其图像。如果 ControlStyle属性包括 csOpaque,控件自己画 直。否则,重绘 方法调用Invalidate方法和 然后Update方法使任何 下方控件的可见部分 控制也将重新粉刷。
Update - 立即处理任何待处理的绘制消息。
调用更新以强制控制 可能之前重新粉刷了 耗时,处理需要 地点。使用更新立即提供 反馈给不能等待的用户 用于Windows绘制消息 到达。
更新不会使 控制,但只是强制重绘 任何已经过的地区 无效。请重新调用重绘 也使控件无效。
答案 1 :(得分:33)
您的问题已经得到解答,但如果您需要良好的性能和较少的闪烁,则应调用Invalidate。它允许Windows优化绘画过程。
Invalidate - 完全重新控制。
在整个控件中使用Invalidate 需要重新粉刷。当超过 控制需求中的一个区域 重新绘制,无效将导致 整个窗口要重新粉刷 单通,避免引起闪烁 通过多余的重绘。没有 呼叫的性能损失 在之前多次无效 控制实际上是重新粉刷的。
答案 2 :(得分:3)
根据较旧的(CBuilder 6)VCL参考:
无效“无效通知控件其整个表面需要重新绘制。调用Invalidate可以防止由一系列部分重绘造成的闪烁。在此之前多次调用Invalidate没有性能损失。控制实际上是重新绘制的。“
在更新控件之前,不会发生实际重绘。要强制立即重新绘制,请改为调用Repaint。
重绘“TWinControl :: Repaint调用Invalidate方法,然后使用Update方法重新绘制控件”(轻微释义)。
(可悲的是,较旧的参考文献比我的新参考文献更好,更完整(CBuilder 2007)。