Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Winforms 自定义控件中的绘制和失效机制_Winforms_Custom Controls_Invalidation - Fatal编程技术网

Winforms 自定义控件中的绘制和失效机制

Winforms 自定义控件中的绘制和失效机制,winforms,custom-controls,invalidation,Winforms,Custom Controls,Invalidation,我正在创建的自定义控件需要在其客户机空间中绘制许多项。调用Invalidate将触发一个新的绘制周期,其中所有项目都将被重新绘制 现在,当有许多项目和许多导航发生在控制范围内,事情需要优化;因此,我需要触发一个绘制周期,其中只绘制一个或两个项目。我存储对这些项的引用,以便paint方法OnPaint知道这是一种快速的方法 困难在于,在执行OnPaint时,很难知道是否同时进行了其他Invalidate调用。在这种情况下,它应该做一个正常的,完整的油漆 我确实使用了剪辑矩形。当然,我可以检查OnP

我正在创建的自定义控件需要在其客户机空间中绘制许多项。调用Invalidate将触发一个新的绘制周期,其中所有项目都将被重新绘制

现在,当有许多项目和许多导航发生在控制范围内,事情需要优化;因此,我需要触发一个绘制周期,其中只绘制一个或两个项目。我存储对这些项的引用,以便paint方法OnPaint知道这是一种快速的方法

困难在于,在执行OnPaint时,很难知道是否同时进行了其他Invalidate调用。在这种情况下,它应该做一个正常的,完整的油漆

我确实使用了剪辑矩形。当然,我可以检查OnPaint中的剪辑矩形是否已成为客户端矩形的整体,调用了一个无效的符号,但这不是100%安全的。我想到了其他类似的解决方案,但它们似乎很粗糙


这个问题通常或最好的解决方法是什么?

这里的解决方案是对BufferedGraphics类采用双缓冲方法。这样,你就不会有这么多棘手的事情发生在你的OnPaint中,你将能够随时随地进行绘画

在“手动管理缓冲图形”下

下面是一个有用的示例: