Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.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
C# 如何预防GDI+;从油漆上重新画所有的东西?_C#_Gdi+ - Fatal编程技术网

C# 如何预防GDI+;从油漆上重新画所有的东西?

C# 如何预防GDI+;从油漆上重新画所有的东西?,c#,gdi+,C#,Gdi+,我想更改使用GDI+绘制自身的控件的某些部分的颜色,例如当某些对象悬停/单击时 如何仅重新绘制必要的部分?当我只需要对其中的几个像素进行更改时,重新绘制数千像素似乎很糟糕 具体来说,我已经绘制了1到128个矩形,我需要在各种事件中重新绘制1到128个矩形。我不想为了只修改1-127而重新绘制128个矩形 我曾读到,在非绘制事件的地方使用绘图代码是一个坏主意。但是,依赖绘制事件时是否可以执行此操作?您可以使用其中一种方法指定要重绘的区域。 然后在Paint event hander中,您可以使用属

我想更改使用GDI+绘制自身的控件的某些部分的颜色,例如当某些对象悬停/单击时

如何仅重新绘制必要的部分?当我只需要对其中的几个像素进行更改时,重新绘制数千像素似乎很糟糕

具体来说,我已经绘制了1到128个矩形,我需要在各种事件中重新绘制1到128个矩形。我不想为了只修改1-127而重新绘制128个矩形

我曾读到,在非绘制事件的地方使用绘图代码是一个坏主意。但是,依赖绘制事件时是否可以执行此操作?

您可以使用其中一种方法指定要重绘的区域。

然后在Paint event hander中,您可以使用属性检查无效区域。

简单的方法是使用自己的绘制例程将每个“矩形”设置为控件。然后有另一个容器类型控件,它“知道”矩形控件是如何拥有的。这在Windows中已经通过PaintEventArgs.ClipRectangle属性进行了大量优化。在该矩形外绘制的任何内容都会很快完成,而不会出现燃烧循环。只需使用Invalidate(Rectangle)进行设置。带有矩形的Invalidate()非常完美,谢谢~