Winforms 自定义控件中的绘制和失效机制
我正在创建的自定义控件需要在其客户机空间中绘制许多项。调用Invalidate将触发一个新的绘制周期,其中所有项目都将被重新绘制 现在,当有许多项目和许多导航发生在控制范围内,事情需要优化;因此,我需要触发一个绘制周期,其中只绘制一个或两个项目。我存储对这些项的引用,以便paint方法OnPaint知道这是一种快速的方法 困难在于,在执行OnPaint时,很难知道是否同时进行了其他Invalidate调用。在这种情况下,它应该做一个正常的,完整的油漆 我确实使用了剪辑矩形。当然,我可以检查OnPaint中的剪辑矩形是否已成为客户端矩形的整体,调用了一个无效的符号,但这不是100%安全的。我想到了其他类似的解决方案,但它们似乎很粗糙Winforms 自定义控件中的绘制和失效机制,winforms,custom-controls,invalidation,Winforms,Custom Controls,Invalidation,我正在创建的自定义控件需要在其客户机空间中绘制许多项。调用Invalidate将触发一个新的绘制周期,其中所有项目都将被重新绘制 现在,当有许多项目和许多导航发生在控制范围内,事情需要优化;因此,我需要触发一个绘制周期,其中只绘制一个或两个项目。我存储对这些项的引用,以便paint方法OnPaint知道这是一种快速的方法 困难在于,在执行OnPaint时,很难知道是否同时进行了其他Invalidate调用。在这种情况下,它应该做一个正常的,完整的油漆 我确实使用了剪辑矩形。当然,我可以检查OnP
这个问题通常或最好的解决方法是什么?这里的解决方案是对BufferedGraphics类采用双缓冲方法。这样,你就不会有这么多棘手的事情发生在你的OnPaint中,你将能够随时随地进行绘画 在“手动管理缓冲图形”下 下面是一个有用的示例: